gpt4 book ai didi

java - Teradata JDBCexecuteBatch 错误处理

转载 作者:行者123 更新时间:2023-11-30 02:53:06 25 4
gpt4 key购买 nike

我正在使用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 个插入语句。第一个插入设置为失败,因为它尝试将 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 的 JDBC manual :

Beginning with Teradata Database 13.10 and Teradata JDBC Driver 13.00.00.16, PreparedStatement batch execution can return individual success and error conditions for each parameter set.

An application using the PreparedStatement executeBatch method must have a catch-block for BatchUpdateException and the application must examine the error code returned by the BatchUpdateException getErrorCode method.

PreparedStatement BatchUpdateException Handling

Execute a multi-statement request using a PreparedStatement batch request and demonstrates the handling of the PreparedStatement BatchUpdateException

关于java - Teradata JDBCexecuteBatch 错误处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38046897/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com