您愿意在以下方面帮助我吗:
创建了 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/