日期:2014-05-18  浏览次数:20669 次

JDBC 批量更新出错
有一个集合:
 Student [ id=3, name=3a,age=2]
 Student [ id=1, name=1a,age=3]
数据库中。
mysql> select * from b;
+----+------+------+
| id | name | age  |
+----+------+------+
|  2 | 2a   |    2 |
|  3 | 3a   |    3 |
+----+------+------+
批更新语句:

   conn.setAutoCommit(false);
PreparedStatement ps = null;
ps = conn.prepareStatement("update b set id=?,name=? where age=?",ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
System.out.println("集合大小:"+ stus.size());
for (int i = 0; i < stus.size(); i++) {
ps.setInt(1, stus.get(i).getId());
ps.setString(2, stus.get(i).getName());
ps.setInt(3,  stus.get(i).getAge());
ps.addBatch();
}
ps.executeBatch();
conn.commit();
  

在执行 ps.executeBatch(); 报错。
java.sql.BatchUpdateException: Duplicate entry '3' for key 1 
JDBC 数据库 MySQL 批处理

------解决方案--------------------
id=3的,重复了。
------解决方案--------------------
id是表的pk吧
------解决方案--------------------
主键重复了。
------解决方案--------------------
id 3 和1里的重复拉
------解决方案--------------------
pk重复了!