2017-05-03 35 views
1

我有代码来执行批处理插入到SqlServer或Oracle表中。我怎么能告诉JDBC来
A)一直走,如果insert语句的一个失败
b)通知我哪一个有问题忽略jdbc批处理中的错误语句

sql.withBatch("""Insert Into ${job.table}($columnNames)Values(${values})""") { stmt -> 
    data.each{ Map<String, String> row -> 
     stmt.addBatch(newMap) 
    } 
} 

目前,如果该行已出现问题,它成功地插入之前发生的所有事情,然后停止插入行。它会告诉我的错误消息,但不是什么数据导致的错误。 Java或Groovy中的解决方案都很好。

我的问题与另一个不一样。他的问题是专门避免插入重复。我需要防止批次失败,因为插入因任何原因而失败。如果解决方案原来是sql相关的,我需要Tsql和PL/SQL解决方案(其他文章特定于postgresql)

回答

1

使用Oracle无法告诉驱动程序继续执行如果出现错误(您的A是不可能的)。但是您可以捕获BatchUpdateException并调用getUpdateCounts()来知道哪些行成功执行。该异常还会从数据库服务器返回错误消息。

+0

这是我的解决方案。我捕获异常,记录它,跳过坏行,并且使用基于UpdateCount的子列表递归。谢谢! – Steve