java - 尽管插入了数据,但唯一索引或主键冲突错误
问题描述
我正在尝试实现用户身份验证表。我正在进行用户注册,我的控制台打印出来:
org.h2.jdbc.JdbcSQLIntegrityConstraintViolationException:唯一索引或主键违规:“PUBLIC.USERS_USERNAME_UIDEX ON PUBLIC.USERS(USERNAME) 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 索引确保唯一索引列的两行不能具有相同的值。 https://www.oracletutorial.com/oracle-index/oracle-unique-index/
Unique index or primary key violation: "PUBLIC.USERS_USERNAME_UINDEX ON PUBLIC.USERS(USERNAME)
说得差不多了。您可能正在插入一个新行,该行与之前已插入的用户名值相同。
我的表正在填充数据
确保您的数据库没有您尝试插入的相同值。
推荐阅读
- html - HTML将画布放在按钮顶部
- viewcontroller - 类型“ViewController”不符合协议“CBCentralManagerDelegate”
- python-3.x - 来自 MDToolbar 的空白空白重叠 KivyMD ImageList
- amazon-web-services - 创建需要多个工人的机械土耳其人 HIT
- go - 找不到包“。” 在 .../vendor/github.com/godror/godror
- javascript - 在模板中序列化 Django 用户:Group 类型的对象不是 JSON 可序列化的
- customization - 从潜在客户创建联系人时设置默认值
- ios - 是否可以以编程方式检索安装在 mac os 上的应用程序图标?
- google-bigquery - Bigquery UDF 函数 - 将查询作为参数发送以执行 min/max/std_dv/count_of nulls 等函数
- jquery - 如何为滑块创建点击功能?