gpt4 book ai didi

java - 如果我要批量发送多个值,如何在插入语句中发送重复值时使用异常处理?

转载 作者:行者123 更新时间:2023-12-02 01:31:18 25 4
gpt4 key购买 nike

我编写了一个类方法,它将获取“批量”数据(通过 SQL 将“值”插入数据库的每一行都来自标记为“data_values”的二维数组)。

但是,在某些情况下,我的程序将获取冗余数据,即可能已经存在于数据库中的数据。因为数据库中有一个主键,如果由于重复条目而无法上传数据,程序就会崩溃。

有没有办法使用 try/catch 以便程序继续上传数据,有效地“跳过”重复项?如果可以,我该如何实现?

提前谢谢您。如果我能澄清我的问题,请告诉我。

我当前的代码在这里:

public void insertData(ArrayList<String> data_types, String[][] data_values) {

try{
c.setAutoCommit(false);
// creates insert statement
String insertDataScript = "INSERT INTO "+tableName+" VALUES (";
for(int q = 0; q < data_types.size()-1; q++) {
insertDataScript += "?, ";
}
insertDataScript += "?)";

PreparedStatement stmt = c.prepareStatement(insertDataScript);
for (int i = 0; i < data_values.length; i++) {

for(int j = 1; j < data_types.size()+1; j++) {

if(data_types.get(j-1).toLowerCase().equals("double")) {
stmt.setDouble(j, Double.valueOf(data_values[i][j-1]));
}
else if(data_types.get(j-1).toLowerCase().equals("string")) {
stmt.setString(j, data_values[i][j-1]);
}
else {
System.out.println("Error");
}
}
stmt.addBatch();
}
stmt.executeBatch();
c.commit();
c.setAutoCommit(true);
stmt.close();
}
catch ( Exception e ) {
System.err.println( e.getClass().getName() + ": " + e.getMessage() );
System.exit(0);
}
}

最佳答案

我的第一个建议是在将数据插入数据库之前删除重复数据。 (编辑:完全错过了“已经在数据库中”部分,所以这可能行不通,除非你想在每次插入之前进行查询。也许你可以使用 INSERT IGNORE ?)

如果由于无法控制主键或无法忽略插入中的重复项而无法执行此操作,则可以通过多种方法捕获特定异常类型并继续执行程序,而不是调用 System.exit 。为了做到这一点,你可能需要有更小的准备好的语句,并将 try/catch 放在“data_values”的 for 循环中。

这是一篇讨论捕获此类异常的帖子:Catch duplicate key insert exception .

关于java - 如果我要批量发送多个值,如何在插入语句中发送重复值时使用异常处理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56013589/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com