我是 Java 世界的新手,我正在尝试创建一个 userExist
方法来检查用户是否存在。好吧,我收到错误:java.sql.SQLException:ResultSet 来自更新。没有数据。
当登录名或密码不存在时,会发生此错误。 next
返回 false
。
我正在使用 MySQL JDBC 5 和 MySQL 4
代码:
public boolean userExist(User enteredUser) {
try {
boolean userExist = false;
PreparedStatement connQuery = this.connection.prepareStatement("select Codigo, Nome, Login, Senha from funcionario where Login='"+enteredUser.getLogin()+"' and Senha='"+enteredUser.getSenha()+"'");
ResultSet result = connQuery.executeQuery();
if(result.next()) {
if((result.getString("Login") == enteredUser.getLogin())&&(result.getString("Senha") == enteredUser.getSenha())) {
enteredUser.setId(result.getInt("Codigo"));
enteredUser.setNome(result.getString("Nome"));
userExist = true;
}
}
connQuery.close();
return userExist;
} catch (SQLException error) {
throw new RuntimeException(error);
}
}
已编辑。
我更改了代码,现在我在第二次尝试登录应用程序时收到此错误。这可能是一个逻辑错误吗?
public boolean userExist(User enteredUser) {
try {
boolean userExist = false;
PreparedStatement query = this.connection.prepareStatement("select Codigo, Nome, Login, Senha from funcionario where Login=? and Senha=?");
query.setString(1,enteredUser.getLogin());
query.setString(2,enteredUser.getSenha());
ResultSet result = query.executeQuery();
if(result.next()) {
if((result.getString("Login").equals(enteredUser.getLogin()))&&(result.getString("Senha").equals(enteredUser.getSenha()))) {
enteredUser.setCodigo(result.getInt("Codigo"));
enteredUser.setNome(result.getString("Nome"));
userExist = true;
}
}
result.close();
query.close();
return userExist;
} catch (SQLException error) {
throw new RuntimeException(error);
}
}
谢谢,
最佳答案
虽然上述方法并不容易受到 SQL 注入(inject)的攻击,但它已经非常接近了。尝试一下你的参数:
PreparedStatement connQuery = this.connection.prepareStatement("select Codigo, Nome, Login, Senha from funcionario where Login=? and Senha=?");
connQuery.setString(1,enteredUser.getLogin());
connQuery.setString(2,enteredUser.getSenha());
此外,尝试在 try block 之外声明结果集和准备好的语句,以便可以在 finally block 中关闭它们。
至于你的实际问题,我会尝试使用execute而不是executeQuery来运行它
关于java - 选择时出现 JDBC 5 + MYSQL 4 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22617653/