【发布时间】:2018-01-12 01:17:30
【问题描述】:
我正在将数据从一个 hsqldb 传输到另一个。两者都有相同的表等。模式是完全相同的。
我有一些庞大的二进制列(不是我的设计决定,但我必须使用它)。我使用rawtohex 函数从数据库A 中读取这些字符串,并使用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 工具手动执行相同的操作,它就可以工作。
我很感激任何可能导致这种情况的想法!
【问题讨论】:
-
请添加竞争 stacttrace
-
看起来
hextoraw的输出比列大小长 -
@jens 不,不是这样。我尝试使用 hsqldb 提供的工具手动执行完全相同的语句,它可以工作
标签: java jdbc prepared-statement hsqldb