我一直在用netbeans15编写登录页面。当我为card number
和password
字段输入正确的值时,它适用于预期的工作。
但是当我在此语句之后输入错误的card number
值和password
时,Rs= St.executeQuery();
代码正在终止,甚至不执行它的下一个语句System.out.println("Resultset"+ Rs);
。
Rs
甚至不包含错误card number
和password
的空值。
我的问题是如何为错误的card number
和password
执行 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) { ... }