两个以相同数据开头的ArrayLists

时间:2014-12-22 10:37:03

标签: java select arraylist comparison

您是否愿意帮助我:

创建3个具有已定义值的ArrayLists和一个将接收数据库中select值的ArrayList。然后我想比较名为database的ArrayList和ArrayLists的值以及我创建的定义值。

给出错误是因为名为NIVELACESSOOper的ArrayList只有数据:" Operacional"和名为NIVELACESSOOperFin的ArrayList有2个数据,这些数据是" Operacional"和#34; Financeiro"当我尝试运行名为NIVELACESSOOperFin的ArrayList时,正在运行NIVELACESSOOper,因为两者都以数据开始" Operacional" ...即使我使用.contains所有比较都出错,因为它正在比较第一个数据而不是整个ArrayList名为NIVELACESSOOperFin。继续只比较第一个数据。

我很乐意得到您的支持!!!

    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");
            }

1 个答案:

答案 0 :(得分:0)

看起来您应该将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列表。