java - 在 Java 中使用 MySQL 数据库的一些代码总是返回错误/未创建帐户?

标签 java mysql sql jdbc

    public boolean clientExists(Request request) {
    String query = "SELECT * FROM `client_table` WHERE user = ? AND password= ?";
    try {
        stmt = connection.prepareStatement(query);
        stmt.setString(1, request.getUsername());
        stmt.setBytes(2, request.getPassword());
        ResultSet set = stmt.executeQuery();
        if (set.next()) {
            return true;
        } else {
            return false;
        }

    } catch (SQLException e) {
        e.printStackTrace();
    }

    return false;
}

/**
 * Creates a user in the database.
 * @param request
 * @return
 */

public boolean createClient(Request request) {
    if (!clientExists(request)) {
        UUID uuid = UUID.randomUUID();
        String exe = "INSERT INTO `client_table`(`id`, `user`, `password`, `create_date`) VALUES (?, ?, ?, ?)";
        try {
            PreparedStatement statement = connection.prepareStatement(exe);
            statement.setString(1, uuid.toString());
            statement.setString(2, request.getUsername());
            statement.setBytes(3, request.getPassword());
            statement.setString(4, getDate());
            statement.executeUpdate(exe);
            return true;
        } catch (SQLException e) {
            e.printStackTrace();
            return false;
        }
    }

    return false;
}

您好,基本上 createClient 方法没有成功创建客户端,我不知道我做错了什么,但其中一种方法不起作用 - 因为从未创建帐户/从未接受用户名:密码。

谁能找出我做错了什么?我正在使用 JDBC。

最佳答案

我可以看出这段代码有两个问题……如果算上自动提交的可能问题,我可以看到三个问题。

  1. 在您的 clientExist 方法中,您正在测试是否存在给定用户和密码的条目。我认为这是错误的。 “存在”测试不应该对提供正确密码的人敏感。这可能会导致使用相同的用户名和不同的密码创建重复的帐户。

  2. 您不会在同一个数据库事务中执行存在性测试和新帐户的插入。这意味着存在潜在的竞争条件,可能导致同一个帐户被创建两次......与之前的问题无关。

我怀疑这些不能解释您没有创建帐户的问题。尽管如此,这些都是您需要修复的错误。

请注意,问题 2 意味着您不应该在启用自动提交的情况下运行,您应该显式提交或回滚事务。

关于java - 在 Java 中使用 MySQL 数据库的一些代码总是返回错误/未创建帐户?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43448339/

相关文章:

mysql - 为什么这个检索 DateTime 字段等于指定值的记录的查询不起作用?

mysql - Eclipse 和 MySQL

java - 如何获得 Oauth 授权的 Instagram 代码?

java - 为什么 ResponseEntity 主体返回 null?

MySQL 查询将 2 列作为一对进行计数

sql - 按月分组,没有记录返回0

sql - 如何生成4位随机数

java - 注释字段的拦截分配的切入点

java - Selenium :点击 <li>

sql - 如何通过单个测试检查 null/空/空白值?