SQLServerBulkCopy 错误处理

SQLServerBulkCopy error handling

我正在研究 SQLServerBulkCopy class 以批量插入数据库。目前,我正在使用 JDBC,当我尝试执行错误的插入时,我可以捕获 BatchUpdateException 以找出导致问题的行。

SQLServerBulkCopy 如何处理错误行,我可以做类似的事情吗?

"How does SQLServerBulkCopy handle error rows"

如果 .writeToServer 遇到错误,它会抛出从服务器返回的异常,例如

com.microsoft.sqlserver.jdbc.SQLServerException: Violation of PRIMARY KEY constraint 'PK__#tmp______3213E83F719D9EEE'. Cannot insert duplicate key in object 'dbo.#tmp'. The duplicate key value is (1).


"if I have 10k rows is it doing 10k insert statements and committing after each one?"

不,它是发送一个INSERT BULK 语句,然后根据SQLServerBulkCopyOptions#setBatchSize 将成批的行流式传输到服务器。默认批处理大小为零 (0),这意味着它将一次有效地流式传输所有 10K 行。对于大于 0 的批量大小,它将流式传输那么多行,然后重复 INSERT BULK 过程,直到所有行都被复制。

如果遇到错误,the documentation 表示:

In this first example, the bulk copy operation is non-transacted. All batches copied up to the point of the error are committed; the batch containing the duplicate key is rolled back, and the bulk copy operation is halted before processing any other batches.


"is [the number of rows actually copied] not available in java?"

看来不是。 .writeToServer returns void,似乎没有 SQLServerBulkCopy 对象的 属性 来提供该信息。