java - 无论现有帐户如何,select count(*) 都会返回 true

标签 java mysql jdbc

AccountCheck 方法始终返回 false 并提示“帐户存在!”总是。想法是检查数据库中是否存在帐户,如果不存在则创建一个帐户。请帮忙。我没有在代码中进行任何验证。

private boolean AccountCheck(String username, String password) {

    try {

        String sql = "select count(*) from user where username=? and password=?";

        PreparedStatement pst = conn.prepareStatement(sql);
        pst.setString(1, username);
        pst.setString(2, password);
        ResultSet rs = pst.executeQuery();

        if (rs.next()) {

            rs.close();
            System.out.println("Account exists!");
            return false;

        } else {

            rs.close();
            System.out.println("Accout does not exist!");
            return true;
        }

    } catch (SQLException e) {

        e.printStackTrace();
        return false;
    }

}

最佳答案

即使记录不存在,计数也会返回“0”作为输出。因此 rs.next() 将始终返回 true。

解决方案:

替换 select count(*) from user where username=?和密码=?

从用户中选择*,其中用户名=?和密码=?

如果您使用*而不是count(*),它将不会返回任何记录

关于java - 无论现有帐户如何,select count(*) 都会返回 true,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36534034/

相关文章:

java - 如何将 jndi 数据源查找交换到内存数据库以进行集成测试?

java - 覆盖通过 FileDescriptor FD 获取的 FileOutputStream 中的属性文件

mysql - 使用 MySQL "in"导致循环?

java - SQL 类型说明符

java - UTF-8 无法通过 JDBC 在带有 MySQL 的 Servlet 中工作

java - 为什么 IcedTea6 不编译 Java 1.5 特定代码?

java - 捆绑添加事件监听器

mysql - SQL 选择在另一列中至少具有一个特定值的所有非唯一行

sql - 同时对查询进行排序和随机化

java - 从 Java 程序到 SQL Developer 数据库的连接