【问题标题】:Unique index or primary key violation error despite data being inserted尽管插入了数据,但唯一索引或主键冲突错误
【发布时间】:2020-11-13 14:26:54
【问题描述】:

我正在尝试实现用户身份验证表。我正在进行用户注册,我的控制台打印出来了:

org.h2.jdbc.JdbcSQLIntegrityConstraintViolationException:唯一索引或主键违规:“PUBLIC.USERS_USERNAME_UINDEX ON PUBLIC.USERS(USERNAME) VALUES 1”; SQL 语句:
插入用户(FIRST_NAME,LAST_NAME,USERNAME,PASSWORD)值(?,?,?,?)[23505-200]

我真的不明白为什么。我的表的SQL脚本如下:

-- auto-generated definition
create table USERS
(
    USER_ID    INT auto_increment,
    USERNAME   VARCHAR2,
    FIRST_NAME VARCHAR2,
    LAST_NAME  VARCHAR2,
    PASSWORD   VARCHAR2,
    constraint USERS_PK
        primary key (USER_ID)
);

create unique index USERS_USERNAME_UINDEX
    on USERS (USERNAME);

create unique index USERS_USER_ID_UINDEX
    on USERS (USER_ID);

我希望username 对于每个条目都是唯一的,因此我将该字段设置为唯一。这就是我填充它的方式:

Connection connection = new InitialiseDatabase().getConnection();
String sql = "INSERT INTO USERS(FIRST_NAME,LAST_NAME,USERNAME,PASSWORD) VALUES(?,?,?,?)";
PreparedStatement myStatement = connection.prepareStatement(sql);
myStatement.setString(1, txtFirstName.getText().trim());
myStatement.setString(2, txtLastName.getText().trim());
myStatement.setString(3, txtUsername.getText().trim());
String hashed = BCrypt.hashpw(txtPassword.getText(), BCrypt.gensalt());
myStatement.setString(4, hashed);
myStatement.executeUpdate();

我该如何解决这个问题?

不过,我的表格正在填充数据。所以我不明白到底出了什么问题。任何帮助将不胜感激。

【问题讨论】:

  • 如果尽管出现此错误消息,您仍然在数据库中找到数据,那么这可能意味着您以某种方式尝试执行相同的插入两次(第一次会成功,第二次会显示此错误)。要么是因为你输入了两次相同的数据,要么你以某种方式调用了这个方法两次。
  • 我调用了一次该方法,但我的数据库是空的,当我尝试在我的数据库的第一个表中插入第一行时,我得到了这个。它确实填充了它,但我删除了该行并再试一次,我得到了相同的结果

标签: java h2


【解决方案1】:

唯一索引确保唯一索引列的两行不能具有相同的值。 https://www.oracletutorial.com/oracle-index/oracle-unique-index/

Unique index or primary key violation: "PUBLIC.USERS_USERNAME_UINDEX ON PUBLIC.USERS(USERNAME) 

说得差不多了。您可能正在插入一个新行,该行与之前已插入的用户名值相同。

我的表格正在填充数据

确保您的数据库没有您尝试插入的相同值。

【讨论】:

  • 我的数据库是空的。我在进入之前清除了所有记录。所以我在插入第一行时得到了这个错误。我删除了它,然后当我再次尝试重新生成时,我也得到了它
猜你喜欢
  • 2019-03-17
  • 2015-09-10
  • 1970-01-01
  • 1970-01-01
  • 2017-04-28
  • 1970-01-01
  • 1970-01-01
  • 2015-03-06
  • 2017-12-22
相关资源
最近更新 更多