我有一个java程序,它从文本文件中读取数千行数据到数据库中。它使用语句批处理一次插入几千行。
如果任何行都无法更新,则继续尝试其余行,直到列表结束。之后,我返回并检查哪些行失败了,然后将这些行的信息打印到日志文件中以供以后检查。
我想知道是否有一种方法可以跳过打印失败的行,如果它失败了,因为重复的条目。我对重复失败很好,但是如果插入失败是因为其他原因,我需要将该行输出到我的日志文件。
我目前的做法是:
int[] updateCounts;
try {
// Do my batch updates by iterating through a vector of data
} catch (BatchUpdateException buE) {
updateCounts = buE.getUpdateCounts();
}
for (int c = 0; c < updateCounts.length; ++c) {
if (updateCounts[c] == Statement.EXECUTE_FAILED) {
// Print data from the original data vector at index c
}
}
而不是打印每一行updateCounts是EXECUTE_FAILED,我只想打印那些不是因为一个唯一的键。
在Google, StackOverflow和BatchUpdateException的文档之间,我猜没有办法做到这一点。但是如果有的话就好了,只是我找不到。
可能有两个原因;
- SQL查询中可能有语法错误。
- 主键可能有重复项。
当您从文本文件中读取数据时,我建议您在SQL中使用Load Data Local InFile
查询。这将解决上述两个问题,您的所有真实条目将被上传到数据库中。
如果这没有帮助,请在您的问题中添加查询,堆栈跟踪将有助于回答