[英]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.