我正在尝试实现一个用户身份验证表。我正在进行用户注册,我的控制台打印出:
org.h2.jdbc.JdbcSQLIntegrityConstraintViolationException:唯一索引或主键冲突:"PUBLIC.USERS_USERNAME_UINDEX ON PUBLIC.USERS(用户名(VALUES 1";;SQL语句:
INSERT INTO USERS(FIRST_NAME,LAST_NAME,USERNAME,PASSWORD(VALUES(?,?,?([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();
我该怎么绕过这个?
不过,我的表中正在填充数据。所以我不明白到底出了什么问题。如有任何帮助,我们将不胜感激。
Unique index or primary key violation: "PUBLIC.USERS_USERNAME_UINDEX ON PUBLIC.USERS(USERNAME)
几乎是在说话。您可能正在插入一个新行,该新行与之前插入的username值相同。
我的表通过填充数据
请确保您的数据库中没有与您要插入的值相同的值。