Java SQLServerBulkCopy错误处理

Java SQLServerBulkCopy错误处理,java,sql-server,jdbc,bcp,Java,Sql Server,Jdbc,Bcp,我正在研究SQLServerBulkCopy类,以便对数据库进行大容量插入。目前,我正在使用JDBC,当我试图执行错误的插入时,我可以捕获BatchUpdateException以找出是哪一行导致了问题 SQLServerBulkCopy如何处理错误行,我是否能够执行类似的操作?“SQLServerBulkCopy如何处理错误行?” 如果.writeToServer遇到错误,它将抛出从服务器返回的异常,例如 com.microsoft.sqlserver.jdbc.SQLServerExcept

我正在研究SQLServerBulkCopy类,以便对数据库进行大容量插入。目前,我正在使用JDBC,当我试图执行错误的插入时,我可以捕获BatchUpdateException以找出是哪一行导致了问题

SQLServerBulkCopy如何处理错误行,我是否能够执行类似的操作?

“SQLServerBulkCopy如何处理错误行?”

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

com.microsoft.sqlserver.jdbc.SQLServerException:违反主键约束“PK_#tmp______;3213E83F719D9EEE”。无法在对象“dbo.#tmp”中插入重复键。重复的键值为(1)


“如果我有10k行,它是否在执行10k insert语句并在每一行之后提交?”

否,它正在发送一条
INSERT BULK
语句,然后根据
SQLServerBulkCopyOptions\setBatchSize
将批行流式传输到服务器。默认批处理大小为零(0),这意味着它将在一次快照中有效地流式处理所有10K行。对于批量大小>0的情况,它将流式传输这么多行,然后重复
批量插入
过程,直到复制完所有行

如果遇到错误,则说明:

在第一个示例中,大容量复制操作是非事务性的。提交复制到错误点的所有批;将回滚包含复制密钥的批,并在处理任何其他批之前停止批量复制操作


“是否[实际复制的行数]在java中不可用?”


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

您看到了吗?“执行非事务性批量复制操作”一节对默认行为有很好的描述。谢谢。但是,在非事务性操作中,如果我有10k行,还有什么我不清楚的呢?它是否在执行10k insert语句并在每次语句之后提交?就像在电影中一样,我会在表演上受到巨大的打击吗?此外,他们还通过查询数据库来检查添加了多少行-这些数据在java中不可用吗?谢谢,这很糟糕,但并非完全出乎意料。看来我们必须在性能和日志记录之间做出选择。谢谢你的确认!