我正在尝试将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内容,并将其写入目标数据库。

07-28 03:18
查看更多