データを1つのhsqldbから別のものに転送しています。どちらも同じテーブルなどを持っています。スキーマは完全に同一です。hsqldbのhextorawを使用したPreparedStatementが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ツールを使って手動で行うと動作します。
これはおそらく何が起こる可能性があるのか、私は何らかのアイデアに感謝しています!
競合戦略を追加してください – Jens
'hextoraw'の出力が列サイズ – Jens
よりも長いようですが、それはそうではありません。私はhsqldbで提供されているツールを使用して、まったく同じステートメントを手動で実行しようとしましたが、 – toydarian