java - 选择时出现 JDBC 5 + MYSQL 4 错误

标签 java mysql jdbc

我是 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/

相关文章:

java - 在 Spring Boot RequestMapping 中添加方法

java - While 循环无限期地运行并且没有给出正确的输出

java - 如何创建 Java 并发队列,以便我们可以在单次调用中阻塞获取超过 1 个元素?

mysql - 我可以在没有数据库连接的情况下使用 DBD::mysql quote() 函数吗?

java - 构建准备好的语句时如何处理可选列

java - MySql 连接器 j 允许用户变量

java - 乐观锁定 - Hibernate 和 EJB - 使用 HQL 批量更新

php - 自定义 WordPress 发布查询

php - 是否需要运行 mysql 服务器才能加载 php_mysql.dll 扩展

java - 不小心删除了 h2 设置。如何找回它们?