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