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 说这可能发生,因为 ResultSet
、PreparedStamenent
已关闭。但是我所有的对象都是打开的。当我尝试 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内容,并将其写入到目标数据库中。
我正在尝试将 CLOB
从一个数据库复制到另一个数据库。但是我收到 The Locator is invalid because it has been changed
错误。
这 article 说这可能发生,因为 ResultSet
、PreparedStamenent
已关闭。但是我所有的对象都是打开的。当我尝试 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内容,并将其写入到目标数据库中。