将数组列表中的值插入数据库
Insert values from arraylist into database
我使用 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)
这是数据:
1个R1
7 一个 R1
2 B R1
3 C R1
4 B R1
8 一个 R1
5个R1
9 C R1
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();
}
代码看起来不错,但请确保您的 table 在 运行 之前被 t运行,因为它看起来或多或少是一组静态字段。
为了进一步说明,主键 5 已经存在于您的数据库中,您需要在 运行 执行此代码之前将其删除。
从您的问题中可以明显看出您遇到了异常,因为您试图在 table 中插入重复的键 (5)。如果我理解正确,根据你的评论,你首先从数据库中获取数据然后更改它。然后你试图将这个修改后的数据保存到数据库中。所以在这种情况下,您需要提供更新查询而不是插入。请尝试以下代码:
public void insertDB(ArrayList<Eventlog> d) throws SQLException {
String query = "update eventlog set resources = '?', activity = '?' where event_id = ?";
PreparedStatement ps = conn.prepareStatement(query);
for (int k = 0; k < d.size()-1; k++) {
ps.setString(1,d.get(k).getResources()); // resource
ps.setString(2,d.get(k).getActivity()); // activity
ps.setInt(3, d.get(k).getEvent_id()); // event id
ps.addBatch();
}
ps.executeBatch();
}
请将 query
字符串中的列名替换为数据库 table 中的实际列名。
我使用 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)
这是数据:
1个R1
7 一个 R1
2 B R1
3 C R1
4 B R1
8 一个 R1
5个R1
9 C R1
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();
}
代码看起来不错,但请确保您的 table 在 运行 之前被 t运行,因为它看起来或多或少是一组静态字段。
为了进一步说明,主键 5 已经存在于您的数据库中,您需要在 运行 执行此代码之前将其删除。
从您的问题中可以明显看出您遇到了异常,因为您试图在 table 中插入重复的键 (5)。如果我理解正确,根据你的评论,你首先从数据库中获取数据然后更改它。然后你试图将这个修改后的数据保存到数据库中。所以在这种情况下,您需要提供更新查询而不是插入。请尝试以下代码:
public void insertDB(ArrayList<Eventlog> d) throws SQLException {
String query = "update eventlog set resources = '?', activity = '?' where event_id = ?";
PreparedStatement ps = conn.prepareStatement(query);
for (int k = 0; k < d.size()-1; k++) {
ps.setString(1,d.get(k).getResources()); // resource
ps.setString(2,d.get(k).getActivity()); // activity
ps.setInt(3, d.get(k).getEvent_id()); // event id
ps.addBatch();
}
ps.executeBatch();
}
请将 query
字符串中的列名替换为数据库 table 中的实际列名。