java - 两个以相同数据开头的 ArrayList

标签 java select arraylist comparison

您愿意在以下方面帮助我吗:

创建了 3 个具有定义值的 ArrayList 和一个将接收数据库中选择的值的 ArrayList。然后我想将称为数据库的 ArrayList 的值与具有我创建的定义值的 ArrayList 进行比较。

给出错误,因为名为 NIVELACESSOOper 的 ArrayList 仅具有数据:“Operacional”,而名为 NIVELACESSOOperFin 的 ArrayList 有 2 个数据,即“Operacional”和“Financeiro”,当我尝试运行名为 NIVELACESSOOperFin 的 ArrayList 时,正在运行 NIVELACESSOOper 因为两者从数据“Operacional”开始...即使我使用 .containsAll ,比较也会出错,因为它正在比较第一个数据,而不是名为 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);
    }

只有在处理完所有行后,您才能检查结果列表。

关于java - 两个以相同数据开头的 ArrayList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27600975/

相关文章:

java - M2Eclipse (M2E) 构建错误

java - 如何在两个 tomcat 服务器之间通信/连接

javascript - 通过 jQuery cookie 脚本删除 cookie

java - 无法从 ArrayList 中找到项目?

java - 对 ArrayList 使用可选索引 - 可能吗?

java - 无法解析符号

java3d 检测特定对象而不是所有碰撞

mysql - 使用列中的值作为 LIKE 语句中表达式的值

mysql - SQL 获取指定列表的第一个

java - arraylist 的副本不断被修改为原始值