0

过去几天我一直想知道 Java 的 Batch Insert 如何在后端工作。这是我一直希望给自己一个想法的示例代码:

for (int ctr = 0; ctr < myArrayList.size(); ctr = ctr ++ ) {

    myStatement.setObject(1, myArrayList.get(ctr) );
    myStatement.addBatch();
    myStatement.clearParameters();

}

然后再打电话myStatement.executeBatch()。这个示例代码给我留下了 2 个想法。

首先,调用后,数据库是否按批次executeBatch()执行INSERT语句?myStatement如果myStatement批处理大小为 3,那么数据库会执行INSERT3 次语句吗?
如果是,那么数据库将执行INSERT从第一批到底部的语句还是相反?(是的,批处理的安排对我来说很重要)

其次,数据库是否执行单个INSERT语句,其中 VALUES 以逗号分隔?

4

1 回答 1

0

它主要取决于驱动程序如何将所有内容编码到服务器,但一般要点是它存储请求的语句执行(以及每次执行的参数),并且当您调用“executeBatch”时,它会将它们全部发送到服务器一次。执行顺序保证按照您在代码中调用“addBatch”的顺序。因此,您按照您希望它执行的顺序进行编码(而不是您认为可能是一种选择的相反顺序)。

因为它是对服务器的一次调用,所以这样做通常更快,因为您不必进行大量往返。这是这样做的主要优势。

批量调整是一种艺术形式,但如果你看一下 hibernate 之类的东西(如果你要求它可以在后台使用批处理),他们建议每批执行大约 15 次。带着一粒盐,但这是一个很好的起始数字。

于 2013-10-29T03:55:34.957 回答