我正在研究SQLServerBulkCopy类来批量插入数据库。目前,我正在使用JDBC,当我尝试执行错误的插入时,我可以捕获BatchUpdateException以找出导致问题的行。
SQLServerBulkCopy如何处理错误行,我能够做类似的事情吗?
答案 0 :(得分:1)
“SQLServerBulkCopy如何处理错误行”
如果.writeToServer
遇到错误,则会抛出从服务器返回的异常,例如
com.microsoft.sqlserver.jdbc.SQLServerException:违反PRIMARY KEY约束'PK __#tmp______3213E83F719D9EEE'。无法在对象'dbo。#tmp'中插入重复键。重复键值为(1)。
“如果我有10k行,它是否会执行10k插入语句并在每个语句之后提交?”
不,它正在发送INSERT BULK
语句,然后根据SQLServerBulkCopyOptions#setBatchSize
将批量行传输到服务器。默认批处理大小为零(0),这意味着它将有效地一次性流式传输所有10K行。对于批量大小> 0,它将流式传输许多行,然后重复INSERT BULK
进程,直到所有行都被复制。
如果遇到错误,the documentation说:
在第一个示例中,批量复制操作是非事务处理。复制到错误点的所有批次都已提交;回滚包含重复键的批次,并在处理任何其他批次之前停止批量复制操作。
“是[实际复制的行数]在java中不可用?”
似乎没有。 .writeToServer
返回void
,并且似乎没有SQLServerBulkCopy
对象的属性来提供该信息。