Java Teradata JDBC executeBatch错误处理

Java Teradata JDBC executeBatch错误处理,java,jdbc,teradata,Java,Jdbc,Teradata,我使用executeBatch方法将数据插入到teradata表中。当前,如果批中的一个插入失败,则批中的所有其他插入也会失败,并且不会插入任何记录。如果有任何插入失败,我如何更改此行为以使批处理中的其他插入成功,以及如何使批处理能够跟踪被拒绝的记录 PS:我已经确保TMODE设置为TERA并启用了自动提交 更新: 目标表定义 CREATE SET TABLE mydb.mytable ,NO FALLBACK , NO BEFORE JOURNAL, NO AFTER JO

我使用executeBatch方法将数据插入到teradata表中。当前,如果批中的一个插入失败,则批中的所有其他插入也会失败,并且不会插入任何记录。如果有任何插入失败,我如何更改此行为以使批处理中的其他插入成功,以及如何使批处理能够跟踪被拒绝的记录

PS:我已经确保TMODE设置为TERA并启用了自动提交

更新: 目标表定义

CREATE SET TABLE mydb.mytable ,NO FALLBACK ,
     NO BEFORE JOURNAL,
     NO AFTER JOURNAL,
     CHECKSUM = DEFAULT,
     DEFAULT MERGEBLOCKRATIO
     (
      col1 INTEGER,
      col2 VARCHAR(10) CHARACTER SET LATIN NOT CASESPECIFIC NOT NULL)
PRIMARY INDEX ( col1 );
下面是示例scala代码。如您所见,此批处理包含5条insert语句。第一次插入被设置为失败,因为它试图将null插入非null字段(col2)。其他4个插入没有任何问题,应该会成功。但是从下面可以看到,批处理中的所有5个插入都失败了。我们有没有办法让其他插入成功?。如上所述,tmode是tera,并且启用了自动提交。如果除了单独重新提交所有失败的查询之外没有其他方法,那么我们将不得不减少批处理大小并满足于较低的吞吐量

Class.forName("com.teradata.jdbc.TeraDriver");
val conn = DriverManager.getConnection("jdbc:teradata://teradata-server/mydb,tmode=TERA","username","password")
val insertSQL =  "INSERT INTO mydb.mytable VALUES (?,?)"
val stmt = conn.prepareStatement(insertSQL)


stmt.setInt(1,1)
stmt.setNull(2,Types.VARCHAR)  // Inserting Null here. This insert will fail
stmt.addBatch()

stmt.setInt(1,2)
stmt.setString(2,"XXX")
stmt.addBatch()

stmt.setInt(1,3)
stmt.setString(2,"YYY")
stmt.addBatch()

stmt.setInt(1,4)
stmt.setString(2,"ZZZ")
stmt.addBatch()

stmt.setInt(1,5)
stmt.setString(2,"ABC")
stmt.addBatch()

try {
val res = stmt.executeBatch()
println(res.mkString(","))
}
catch {
 case th: BatchUpdateException => {
        println(th.getUpdateCounts().mkString(","))
 }
}
结果 -3、-3、-3、-3、-3这是Teradata的:

从Teradata数据库13.10和Teradata JDBC驱动程序开始 13.00.00.16,PreparedStatement批处理执行可以为每个参数集返回单独的成功和错误条件

使用PreparedStatement executeBatch方法的应用程序必须 拥有BatchUpdateException的catch块,应用程序必须 检查BatchUpdateException返回的错误代码 getErrorCode方法


谢谢你的回答。我查阅了这个示例,并更新了我的问题以获得后续问题。@mig foxbat:对不起,我不知道你的代码有什么问题,因为我不是Java开发人员。谢谢Dieter。。所以我想确认的最后一件事是,如果我的10条记录由于一条记录而失败,那么没有一条记录被提交,我将不得不单独重新应用每条记录。