数据没有插入到我的SQL表中,但也表示存在重复的主键

时间:2019-03-22 03:15:56

标签: 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方法为什么不起作用。谢谢您的时间!

edit:从statement.setString(1, "username");更改为statement.setString(1, String.valueOf(username));,依此类推。但是现在出现数据截断错误。 Data truncation: Data too long for column 'username' at row 1

4 个答案:

答案 0 :(得分:2)

您的错误是您正在将固定值而不是预期值插入到语句中。

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);

答案 1 :(得分:1)

检查表--- - hosts: dev become: true become_user: root tasks: - name: Install zsh if enough space with_items: "{{ ansible_mounts }}" when: item.mount == "/" and item.size_available > 10737400 yum: name: zsh state: latest ,如果user的值为'1',请将其删除并重试。

答案 2 :(得分:1)

这是因为用户名是您的主键,并且您试图将重复的记录插入到用户名列的表中。 检查您要插入的用户名是否已存在于表中。

答案 3 :(得分:1)

您可以尝试一些尝试来进一步调试它。

1)尝试在statement.setString()方法中传递字符串值,以确认您的数据库调用已到位。

public void createUser()引发SQLException {

String query = " INSERT INTO users(username, password, name, email)"
        + " VALUES(?, ?, ?, ?)";
PreparedStatement statement = db.getConn().prepareStatement(query);
statement.setString(1, "Test");
statement.setString(2, "Test");
statement.setString(3, "name");
statement.setString(4, "abc@abc.com");

    statement.executeUpdate();
  //  error is here
    statement.close();
    db.getConn().commit();
    System.out.println("success");

}

2)尝试在调用statement.setString()之前为用户名打印值,并检查

3)检查表中的现有数据,也许您试图键入重复的记录。因为用户名是表的主键。