[英]Java else statement error
如果輸入錯誤的用戶名和密碼,JOptionPane框將至少出現3次。 首先,它甚至是一個循環。
我花了幾個小時看代碼並試圖修改它但沒有運氣。 也無法獲得太多幫助,但如果有人可以指出或修復我的錯誤,我將非常感激。
我遇到問題的代碼如下。
try{
PreparedStatement ps = con.prepareStatement("SELECT Login, Password, Restriction FROM Users");
ResultSet rs = ps.executeQuery();
while(rs.next()){
if (username.equals(rs.getString("Login")) && password.equals(rs.getString("Password")) && ("Admin".equals(rs.getString("Restriction")))){
this.setVisible(false);
MainMenuAdmin admin = new MainMenuAdmin();
admin.setVisible(true);
}
else if (username.equals(rs.getString("Login")) && password.equals(rs.getString("Password")) && ("Engineer".equals(rs.getString("Restriction")))){
this.setVisible(false);
MainMenuEngineer engineer = new MainMenuEngineer();
engineer.setVisible(true);
}
else if (!username.equals(rs.getString("Login")) || !password.equals(rs.getString("Password"))){
JOptionPane.showMessageDialog(null, "Login Failed");
}
}
}
catch(SQLException sqle){
sqle.printStackTrace();
}
另外如何對代碼進行編碼,如果用戶名或密碼不存在,則說“用戶名或密碼不存在”?
你的方法存在很大缺陷。 在錯誤的方法中修復錯誤是沒有意義的。 請更改您的查詢
SELECT Restriction,ADD_REQD_FIELDS..., FROM Users Login = ? and Password = ?
如果resultset
計數為1
,則表示您擁有有效用戶。這樣您就可以檢查用戶的身份驗證並從數據庫中檢索用戶信息。 你的方法不必要地過於復雜。
你接近是完全錯誤的。
close()
資源。 這是一種檢查登錄詳細信息的方法。 它從數據庫中查詢username
和password
。
public String checkLogin(final Connection con, final String username, final String password) throws SQLException {
final String q = "SELECT Restriction FROM Users WHERE Login = ? AND Password = ?";
try (final PreparedStatement ps = con.prepareStatement(q)) {
ps.setString(1, username);
ps.setString(2, password);
try (final ResultSet rs = ps.executeQuery()) {
if (!rs.next()) {
return "Invalid";
}
return rs.getString("Restriction");
}
}
}
你會這樣使用它:
public void checkLogin() {
try {
final String loginResult = checkLogin(con, username, password);
switch (loginResult) {
case "Admin":
this.setVisible(false);
MainMenuAdmin admin = new MainMenuAdmin();
admin.setVisible(true);
return;
case "Engineer":
this.setVisible(false);
MainMenuEngineer engineer = new MainMenuEngineer();
engineer.setVisible(true);
default:
JOptionPane.showMessageDialog(null, "Login Failed");
}
} catch (SQLException sqle) {
sqle.printStackTrace();
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.