Java 将arraylist中的值插入数据库

Java 将arraylist中的值插入数据库,java,jdbc,arraylist,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)

我使用
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
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();  
    }  
public void insertDB(ArrayList d)抛出SQLException{
String insert=“插入事件日志值(?,?)”;
准备好的报表ps=conn.prepareStatement(插入);
对于(int k=0;k
代码看起来不错,但在运行此操作之前,请确保表被截断,因为它看起来或多或少是一组静态字段


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

从您的问题中可以明显看出,您遇到了异常,因为您试图在表中插入重复的键(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();  
}  
public void insertDB(ArrayList d)抛出SQLException{
String query=“更新事件日志集资源='?',活动='?',其中事件id=?”;
PreparedStatement ps=conn.prepareStatement(查询);
对于(int k=0;k

请用数据库表中的实际列名替换
query
字符串中的列名。

错误来自数据库,告诉您正在尝试插入重复的主键。事件id是主键吗?数据库中是否已经存在id为5的事件?是的,事件id是主键,事件id 5已经存在于数据库中,但我从数据库中获取这些数据,并对其进行一些修改,然后将其返回数据库。那么,这是一个更新,而不是插入。插入操作总是尝试创建一个新记录。当我写更新而不是插入时,它没有问题!如果你认为答案有用,别忘了接受:)