所以我只是想让注册用户数据显示在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
答案 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)检查表中的现有数据,也许您试图键入重复的记录。因为用户名是表的主键。