我使用 java servlet 和 jsp 创建了一个登录表单。用户名、密码等登录信息保存在数据库中。 我的问题是,当用户输入我的 java 类在数据库中找不到的信息时,我没有得到异常。如果登录数据在 Db 中不可用,我如何创建异常?
public boolean loginValidator(String e, String p) throws SQLException {
String userName = e;
String password = p;
boolean validate = false;
try{
PreparedStatement ps = connection.prepareStatement("SELECT * FROM user WHERE email = ? and password = ?");
ps.setString(1, userName);
ps.setString(2, password);
ResultSet rst = ps.executeQuery();
while (rst.next()) {
validate = (rst.getString("email").equals(userName)) && ((rst.getString("password").equals(password)));
}}
catch(SQLException ex){
System.out.println(ex.getMessage());
validate = false;
}
return validate;
}
这实际上是我的 java 类中的一个方法,用于验证 boolean 类型并将其发送到 servlet,稍后 servlet 决定根据返回的 boolean 类型来引导或限制对应用程序的访问。
PS:javaWeb的新学习者。
最佳答案
并且是 SQL 学习者,对吧?因为没有异常(exception),如果数据库表中没有这样的行。该查询仅返回空的ResultSet
。因此,您必须检查结果集是否为空(然后检查电子邮件和密码 - 但恕我直言,这是多余的)。
public boolean loginValidator(String userName, String password) {
try{
PreparedStatement ps = connection.prepareStatement("SELECT * FROM user WHERE email = ? and password = ?");
ps.setString(1, userName);
ps.setString(2, password);
ResultSet rst = ps.executeQuery();
return rst.next(); // whether DB contains such record
} catch(SQLException ex){
ex.printStackTrace(); // TIP: use logging
}
return false;
}
顺便说一句。我强烈建议您不要在数据库中存储明文密码。
关于java - 无法获取所需的 JDBC 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32097771/