您是否愿意帮助我:
创建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");
}
答案 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
列表。