java - 数据没有被插入到我的 SQL 表中,但它还说存在重复的主键

标签 java mysql mysql-workbench

所以我只是想将注册用户数据显示在 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/

相关文章:

java - Keytool 应用程序在哪里?

python - mysql表中的时间列

PHP/MYSQL 将当前时间插入日期时间

mysql - 将 Visual Studio 连接到 MySQL

java - Android (Java) 中的 PublicKey 和 PrivateKey 构造函数

java - 使用 DatagramPacket 发送 0x04 - 类似于十六进制 char[] 数据

java - 如何使用替换/正则表达式替换字符串中的两个字符?

php - PDO/MySQL 使用 if 语句获取多列

MySQL Workbench 无法在 Windows 8.1 上运行

java - 没有为SQL参数'orgName'提供值:此SqlParameterSource为空