Java else语句错误
如果输入了错误的用户名和密码,JOptionPane框至少会出现3次。首先,这是一个很长的循环 我花了几个小时看代码,试图修改它,但没有运气。也不能得到太多帮助,但如果有人能指出或纠正我的错误,我将不胜感激 下面是我遇到问题的代码Java else语句错误,java,mysql,sql,if-statement,jdbc,Java,Mysql,Sql,If Statement,Jdbc,如果输入了错误的用户名和密码,JOptionPane框至少会出现3次。首先,这是一个很长的循环 我花了几个小时看代码,试图修改它,但没有运气。也不能得到太多帮助,但如果有人能指出或纠正我的错误,我将不胜感激 下面是我遇到问题的代码 try{ PreparedStatement ps = con.prepareStatement("SELECT Login, Password, Restriction FROM Users"); ResultSet r
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_requd_FIELDS…,FROM Users Login=?密码=?
如果
resultset
计数为1
,则您拥有一个有效的用户。通过这种方式,您可以检查用户的身份验证,并从数据库中检索用户信息。你的方法不必要地过于复杂 你的方法是完全错误的
close()
在使用完资源后关闭它们用户名
和密码
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();
}
}
可能有三个用户。这就是窗格多次出现的原因。这是因为您迭代数据库中的每个用户,并在每次决策时更新GUI。您可以改为设置标志,并在循环后更新GUI。或者您完全改变了方法:使用准备好的语句查找输入的用户/密码/限制(您必须注意“SQL注入”!),并根据(一个)结果(如果有)确定限制。问题不在于else语句,而在于您的逻辑:1。为所有结果运行代码;2.您甚至不使用查询来筛选不应该匹配的条目;3.你打开了一个数据库游标,但从来没有关闭过。谢谢你。我尝试了这个,但是,在checkLogin方法中,它告诉我使用catch,因此,我无法返回“return rs.getString(“Restriction”)”。我不得不返回null。那次捕获把一切都毁了!我怎样才能解决这个问题。你是一个救生员和传奇人物!!!我正在使用Java7。catch子句破坏了代码lol。没有catch子句,我的程序无法编译。我该如何解决这个问题呢?然后代码在没有捕获的情况下编译;你错过了你的方法中的投掷条款吗?哦,是的,我错过了投掷条款,哎呀。我收到一个新错误,“连接关闭后不允许进行任何操作”。@user3138212该错误相当清楚。您的连接已关闭。