executeQuery() 意外终止



我一直在用netbeans15编写登录页面。当我为card numberpassword字段输入正确的值时,它适用于预期的工作。

但是当我在此语句之后输入错误的card number值和password时,Rs= St.executeQuery();代码正在终止,甚至不执行它的下一个语句System.out.println("Resultset"+ Rs);

Rs甚至不包含错误card numberpassword的空值。

我的问题是如何为错误的card numberpassword执行 else 语句?代码未输入 else 阻止错误的文本字段!!

Connection Con = null;
PreparedStatement pst = null;  
ResultSet Rs=null;
Statement St;
private void LoginTbMouseClicked(java.awt.event.MouseEvent evt) {                                    
if(UnameTb.getText().isEmpty() || PasswordTb.getText().isEmpty()){
JOptionPane.showMessageDialog(this, "Enter Card and PIN Number");
}else{
String Query1 = "select * from AccountTbl where `Card Number`=? and `PIN`=?";
try{

Con = DriverManager.getConnection("jdbc:mysql://localhost:3306/CREDITDEBITDb","Amaity","Alok@2022");

PreparedStatement St = Con.prepareStatement(Query1);
Rs= St.executeQuery();
System.out.println("Resultset"+ Rs);

if(Rs.next()){
new MainMenu().setVisible(true);
this.dispose();

}else{
JOptionPane.showMessageDialog(this, "Wrong Card Numner or PIN");
}
}catch(HeadlessException | SQLException e){
}
}      // TODO add your handling code here:
}  

您看不到任何异常,因为您捕获了它们并且在此处不执行任何操作:

catch(HeadlessException | SQLException e){
// bare minimum is log message or
e.printStackTrace();
// ideally: throw e
// or deal with issue here
}

您应该记录并传递报告的异常。

错误在于您尚未为语句中的绑定变量 "?" 分配值。 假设这些是字符串,将它们绑定:

St.setString(1, cardNum);
St.setString(2, pin);
ResultSet rs = St.executeQuery();

如果您遵守 Java 命名约定(驼峰大小写变量),它会帮助团队。

重构代码,以便 JDBC 和 GUI 代码不会混合使用。您可以在没有 UI 代码的情况下进行帮助程序调用,调用该帮助程序只是为了执行数据库工作:

public boolean checkLogin(String cardNo, String pin) { ... }

最新更新