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
对象的 属性 来提供该信息。
我正在研究 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
对象的 属性 来提供该信息。