我正在将数据从一个hsqldb传输到另一个hsqldb。两者都有相同的表格等。模式完全相同。PreparedStatement与hsqldb中的hextoraw引发java.sql.SQLDataException:数据异常:字符串数据,右截断
我有一些大规模的二进制列(不是我的设计决策,但我必须与它合作)。那些从数据库A
以rawtohex
函数读取的字符串,并使用hextoraw
函数写入数据库B
。
的代码看起来就像这样:
String query = "SELECT rawtohex(PAYLOAD) FROM TABLE_X;"
Statement selectPst = connA.createStatement();
ResultSet data = selectPst.executeQuery(query);
String insert = "INSERT INTO TABLE_X (PAYLOAD) VALUES (hextoraw(?))";
PreparedStatement insStmt = connB.prepareStatement(insert);
data.next();
insStmt.setString(1, data.getString(1));
insStmt.executeUpdate(); // <- java.sql.SQLDataException: data exception: string data, right truncation
通常情况下,如果该列的数据太小,抛出此异常。但是数据在一个具有相同表和列的数据库中,如果我使用hsqldb工具手动执行相同的操作,它就可以工作。
我很感激任何可能造成这种情况的想法!
添加竞争stactrace请 – Jens
看起来'hextoraw'的输出比列大小要长 – Jens
@jens不,不是。我尝试使用随hsqldb提供的工具手动执行完全相同的语句,并且它的工作原理 – toydarian