【发布时间】:2014-04-16 00:14:53
【问题描述】:
这是我的桌子:
mysql> DESCRIBE app_user;
+----------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| username | varchar(40) | NO | PRI | NULL | |
| password | varchar(40) | NO | | NULL | |
| email | varchar(40) | NO | PRI | NULL | |
+----------+-------------+------+-----+---------+----------------+
4 rows in set
mysql>
我的期望是,我不应该添加 2 行具有相同用户名的行,因为用户名是主键..
这是我的 Java 代码:
@Test
public void shouldNotInsertWithSameUserName() throws IOException, SQLException {
AppUserAccessObject appUserAccessObject = new AppUserAccessObject(new DatabaseConnectionImpl());
Assert.assertFalse(appUserAccessObject.insertUser("koray", "email", "password"));
}
所以这个测试通过了,这意味着 insertUser 返回 false。但是当我检查数据库时,我看到插入了一个新行。我究竟做错了什么?而插入用户:
public boolean insertUser(String username,String email,String password) throws SQLException {
PreparedStatement preparedStatement = connection.prepareStatement("INSERT INTO "+ tableName + "(username,email,password) VALUES(?,?,?)");
preparedStatement.setString(1,username);
preparedStatement.setString(2,email);
preparedStatement.setString(3,password);
boolean execute = preparedStatement.execute();
return execute;
}
【问题讨论】:
-
您误解了 PreparedStatement#execute() 的返回值。请仔细阅读docs.oracle.com/javase/7/docs/api/java/sql/…
标签: java mysql sql prepared-statement