私はトラブルJdbcTemplateを使用して文字列としてMySQLのVARBINARYフィールドを読んを抱えているとしてMySQL VARBINARYフィールドにアクセスします。私たちは文字列略語( "ABC"、 "XYZ"、 "LMN"など)をVARBINARYとして保存しています(なぜ私に質問しません)。私がConnectionクラス/ PreparedStatementルートと普通のResultSetsとSqlRowSetを使用すると、Stringを読むのに問題はありません。つまり、あるJdbcTemplate:文字列
このコードは動作します:
String sql = "select MY_VARBINARY_FIELD from MY_TABLE where KEY1=? and KEY2=?";
PreparedStatement stmt = connectionDev.prepareStatement(sql);
prepStmt1.setInt(1, key1);
prepStmt1.setInt(2, key2);
ResultSet rs = stmt.executeQuery();
while (rs.next()) {
String s = rs.getString("MY_VARBINARY_FIELD");
System.out.print(s + " ");
}
**Output:** AHI-1 DKFZp686J1653 FLJ14023 FLJ20069 JBTS3 ORF1 dJ71N10.1
しかし、このコードではありません:
String sql = "select MY_VARBINARY_FIELD from MY_TABLE where KEY1=? and KEY2=?";
Object[] params = {key1, key2};
SqlRowSet rows = getJdbcTemplate().queryForRowSet(sql, params);
while (rows.next()) {
String s = rows.getString("MY_VARBINARY_FIELD");
System.out.print(s + " ");
}
**Output:** [[email protected] [[email protected] [[email protected] [[email protected] [[email protected] [[email protected]857dc15 [[email protected]
はなぜSqlRowSetとResultSetがVARBINARYのために異なる文字列表現を生成していますか?そして、どうすればJdbcTemplate/SqlRowSetを使って "正しい"表現を得ることができますか?
ありがとうございます!
SOLUTION
マークRotteveel(下記)の質問に答えました。私はそれがこれで動作するようになった:
String sql = "select MY_VARBINARY from MY_TABLE where KEY=VALUE";
SqlRowSet rows = getJdbcTemplate().queryForRowSet(sql);
while (rows.next()) {
byte[] varbinary = (byte[]) rows.getObject("MY_VARBINARY");
System.out.println(new String(varbinary));
}
+1良いスポット。また、クロスプラットフォームの奇妙さを避けるために文字エンコーディングを指定することをお勧めします。 – artbristol
@artbristol Trueですが、ドライバが明示的なキャラクタセットなしでもそれを実行していると思われます。 –
+1これはかなり意味があり、あなたはおそらく正しいでしょう。私は今日後でチェックします。 – ktm5124