所以我只是想将注册用户数据显示在 SQL 表中。我知道我已成功连接到数据库,但没有添加任何数据。我不知道这是为什么。当我运行代码时,我收到一个关于主键重复条目“用户名”的 SQLException。这是代码
public void createUser() throws SQLException{
String query = " INSERT INTO users(username, password, name, email)"
+ " VALUES(?, ?, ?, ?)";
PreparedStatement statement = db.getConn().prepareStatement(query);
statement.setString(1, String.valueOf(username));
statement.setString(2, String.valueOf(password));
statement.setString(3, String.valueOf(name));
statement.setString(4, String.valueOf(email));
statement.executeUpdate();
// error is here
statement.close();
db.getConn().commit();
System.out.println("success");
}
我可以毫无问题地打印出所有用户名/密码/姓名/电子邮件内容。该错误在 statement.executeUpdate()
行上引发。
这是正在创建的数据库。
CREATE TABLE `users` (
`username` VARCHAR(45) NOT NULL,
`password` VARCHAR(45) NOT NULL,
`name` VARCHAR(45) NOT NULL,
`email` VARCHAR(45) NOT NULL,
PRIMARY KEY(`username`))
COMMENT = "this is a test table";
我可以在 MySQLWorkbench 上插入数据,没有问题,我可以执行 DESCRIBE users
并查看包含在工作台中手动创建的用户的表,但我不确定为什么 java 方法不起作用。感谢您的宝贵时间!
编辑:从 statement.setString(1, "username");
更改为 statement.setString(1, String.valueOf(username));
等等。但现在出现数据截断错误。 数据截断:第 1 行“用户名”列的数据太长
最佳答案
您的错误是您在语句中插入了固定值,而不是您想要的值。
statement.setString(1, "username");
statement.setString(2, "password");
statement.setString(3, "name");
statement.setString(4, "email");
变量名称不应包含引号。例如:
statement.setString(1, username);
statement.setString(2, password);
statement.setString(3, name);
statement.setString(4, email);
关于java - 数据没有被插入到我的 SQL 表中,但它还说存在重复的主键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55292401/