gpt4 book ai didi

java - 如何处理 Statement.ExecuteBatch() 中的错误或重复记录

转载 作者:太空宇宙 更新时间:2023-11-04 14:40:35 24 4
gpt4 key购买 nike

我有一个java程序,它处理一个包含100万条记录的文件,并使用批量插入将其插入表中,即Statement.addbatch(),然后Statement.executeBatch() 每 1000 条记录之后。程序运行速度相当快。

但是,如果存在重复记录,即表引发异常,则整批记录都会消失,其余记录将无法跟踪。

即使我得到 updatecount() 也没有帮助,因为我无法将重复项插入另一个表等。

有没有一种方法,在1000个特定批处理插入中,如果存在坏记录,则该批处理中的每条记录都可以1对1处理,以便可以将坏/重复记录放置在另一个表中,并且常规表中的非重复项?

还有其他我可以使用的类(class)吗?我知道在C++中Oracle提供了OCI,它可以批量处理单个记录(称为主机数组操作),但在Java中,批量插入通常是通过循环中的Statement.adding然后插入来完成的使用Statement.executeBatch()。

谢谢。

最佳答案

我会把它分成 1,000 个小块,就像这样

  final int BATCH_SIZE = 1000;
for (int i = 0; i < DATA_SIZE; i++) {
statement.setString(1, "a@a.com");
statement.setLong(2, 1);
statement.addBatch();
if (i % BATCH_SIZE == BATCH_SIZE - 1)
statement.executeBatch();
}
if (DATA_SIZE % BATCH_SIZE != 0)
statement.executeBatch();

一批记录中包含少量坏记录的情况很常见。如果您尝试一次性插入所有记录,而其中一条记录失败,则整批插入都将被拒绝。这是预料之中的,也是“事务处理”的核心目的。

通常对于批量插入,您可以采取两种方法:

1)在每次记录插入后提交 --> 非常性能密集的过程。

2)将总记录分成更小的“ block ”并插入数据库。这样只有包含坏记录的 block 会失败,其他 block 将被插入到数据库中。

或者,如果您不想自己处理这些事情,可以选择框架。 Spring batch

在这种情况下可能是您的选择之一

关于java - 如何处理 Statement.ExecuteBatch() 中的错误或重复记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24988643/

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