gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 03:21:41 24 4
gpt4 key购买 nike

    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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com