Teradata CLOB 和 JDBC:定位器无效,因为它已被更改错误

Teradata CLOB and JDBC : The Locator is invalid because it has been changed ERROR

我正在尝试将 CLOB 从一个数据库复制到另一个数据库。但是我收到 The Locator is invalid because it has been changed 错误。

article 说这可能发生,因为 ResultSetPreparedStamenent 已关闭。但是我所有的对象都是打开的。当我尝试 executeBatch()

时会抛出错误
 Statement select = connectionDB1.createStatement(); 
 ResultSet rs = select.executeQuery("SELECT TOP 1 myClob FROM myTab"); 
 rs.next();  
 PreparedStatement ps = connectionDB2.prepareStatement("INSERT INTO myTab2 SELECT ? ");
 ps.setClob(1, rs.getClob(1)); 
 System.out.println("CLOB inserted");
 ps.addBatch();
 ps.executeBatch(); // ERROR is thrown here before I close any objects WHY? 
                   // java.sql.BatchUpdateException

为什么会这样?如何预防?


PS:以上代码适用于任何其他数据类型:VARCHAR、DECIMAL

文章说CLOB是在同一个会话中有效的定位器。

但是当您尝试将它应用于另一个连接时,您是在 不同的 会话中使用它,因此会发生错误。

您需要做的是从源数据库中读取实际的CLOB内容,并将其写入到目标数据库中。