将arraylist中的值插入数据库

时间:2015-06-19 13:22:19

标签: java jdbc 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)

这是数据:
1 A R1
7 A R1
2 B R1
3 C R1
4 B R1
8 A R1
5 A 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();  
    }  

2 个答案:

答案 0 :(得分:1)

代码看起来很好,但是在运行之前确保你的表被截断,因为看起来这或多或少是一组静态字段。

为了进一步说明,数据库中已存在主键5,您需要在运行此代码之前将其删除。

答案 1 :(得分:0)

从您的问题中可以看出,您正在尝试在表格中插入重复键(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字符串中的列名替换为数据库表中的实际列名。