我使用java servlets和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决定根据返回的布尔类型指示或限制对应用程序的访问。
PS:javaWeb的新学习者。
答案 0 :(得分:1)
是SQL的学习者,对吗?因为没有例外,如果DB表中没有这样的行。查询只返回空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;
}
顺便说一下。我强烈建议您不将明文密码存储在数据库中。