java将arraylist中的值插入数据库
我使用addbatch()
和executebatch()
将ArrayList
中的值插入数据库
但当我运行代码时,出现了以下错误消息:
Exception in thread "main" java.sql.BatchUpdateException: Duplicate entry '5' for key 'PRIMARY'
at com.mysql.jdbc.PreparedStatement.executeBatchSerially(PreparedStatement.java:2020)
at com.mysql.jdbc.PreparedStatement.executeBatch(PreparedStatement.java:1451)
这是数据:
1A R1
7 A R1
2BR1
3 C R1
4 B R1
8A R1
5 A R1
9cr1
6 C R1
守则的这部分:
public void insertDB(ArrayList<Eventlog> d) throws SQLException {
String insert = "insert into eventlog values(?,?,?)";
PreparedStatement ps = conn.prepareStatement(insert);
for (int k = 0; k < d.size()-1; k++) {
ps.setInt(1, d.get(k).getEvent_id()); // event id
ps.setString(3,d.get(k).getResources()); // resource
ps.setString(2,d.get(k).getActivity()); // activity
ps.addBatch();
}
ps.executeBatch();
}
# 1 楼答案
代码看起来很好,但在运行此代码之前,请确保表被截断,因为它看起来或多或少是一组静态字段
为了进一步澄清,数据库中已经存在主键5,您需要在运行此代码之前删除它
# 2 楼答案
从您的问题可以明显看出,您遇到了异常,因为您试图在表中插入重复的键(5)。如果我理解正确,根据您的评论,您首先从数据库获取数据,然后对其进行更改。然后,您将尝试将修改后的数据保存到数据库中。因此,在这种情况下,您需要提供更新查询,而不是插入查询。请尝试以下代码:
请用数据库表中的实际列名替换
query
字符串中的列名