簡體   English   中英

兩個以相同數據開頭的ArrayList

[英]Two ArrayLists starting with the same data

您想在以下方面為我提供幫助:

創建了3個具有定義值的ArrayList和一個將在數據庫中接收選擇值的ArrayList。 然后,我想將數據庫的ArrayList值與具有我創建的定義值的ArrayLists進行比較。

正在給出錯誤,因為名為NIVELACESSOOper的ArrayList僅具有數據:“ Operacional”和名為NIVELACESSOOperFin的ArrayList具有2個數據“ Operacional”和“ Financeiro”,並且當我嘗試運行名為NIVELACESSOOperFin的ArrayList時正在運行NIVELACESSOOper,因為兩者都以NIVELACESSOOper開頭數據“ Operacional” ...即使我使用.contains,所有比較也都出錯了,因為它是在比較第一個數據,而不是整個名為NIVELACESSOOperFin的ArrayList。 僅繼續比較第一個數據。

我希望得到您的支持!

    List NIVELACESSOOper; {

    NIVELACESSOOper = new ArrayList();
    NIVELACESSOOper.add("Operacional");
}

List NIVELACESSOOperFin; {

    NIVELACESSOOperFin = new ArrayList();
    NIVELACESSOOperFin.add("Operacional");
    NIVELACESSOOperFin.add("Financeiro");
}

List NIVELACESSOAdmFinOper; {

    NIVELACESSOAdmFinOper = new ArrayList();
    NIVELACESSOAdmFinOper.add("Administrador");
    NIVELACESSOAdmFinOper.add("Financeiro");
    NIVELACESSOAdmFinOper.add("Operacional");
}


public void Logar() {

    List result = new ArrayList();

    String sql = "SELECT usuario_login, senha_login, nome_login, nivelAcesso FROM nivelAcessoSistema NATURAL JOIN login WHERE usuario_login = ? AND senha_login = ?";

    try {

        pst = con.prepareStatement(sql);

        pst.setString(1, txtUsuario.getText()); //Campo do usuário
        pst.setString(2, txtSenha.getText()); //Campo da senha

        rs = pst.executeQuery();

        if (rs.next()) { //Se existe registro no banco de dados com os dados informados na tela de login...

            String nivelAcesso = rs.getString("nivelAcesso"); //Comparando valor de atríbuto "nivelAcesso" do banco de dados

            result.add(nivelAcesso);

            if (result.containsAll(NIVELACESSOOper)) {

                JOptionPane.showMessageDialog(null, "Enter the screen Operacional");
            }

            else if(result.containsAll(NIVELACESSOOperFin)) {

                JOptionPane.showMessageDialog(null, "Enter the screen Operacional - Financeiro");
            }

            else if (result.containsAll(NIVELACESSOAdmFinOper)) {

                JOptionPane.showMessageDialog(null, "Enter the screen Operacional - Financeiro - Administrativo");
            }

看起來您應該更改if語句的順序以從最大的列表開始:

        if (result.containsAll(NIVELACESSOAdmFinOper)) {

            JOptionPane.showMessageDialog(null, "Enter the screen Operacional - Financeiro - Administrativo");
        }

        else if(result.containsAll(NIVELACESSOOperFin)) {

            JOptionPane.showMessageDialog(null, "Enter the screen Operacional - Financeiro");
        }

        else if (result.containsAll(NIVELACESSOOper)) {

            JOptionPane.showMessageDialog(null, "Enter the screen Operacional");
        }

也就是說,您的result列表只能包含一個元素,因此只有result.containsAll(NIVELACESSOOper)可以返回true。

由於名稱不是英語,因此我不確定是否要從數據庫讀取什么數據,但是如果您希望有多行,則應將代碼更改為:

    while (rs.next()) { //Se existe registro no banco de dados com os dados informados na tela de login...

        String nivelAcesso = rs.getString("nivelAcesso"); //Comparando valor de atríbuto "nivelAcesso" do banco de dados

        result.add(nivelAcesso);
    }

並且只有在處理完所有行之后,才檢查result列表。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM