私はDerbyデータベースを使用しています。私はこのクエリを書いた:PreparedStatementのBLOB型の比較
InputStream is = new java.io.ByteArrayInputStream(BYTES);
PreparedStatement st11 = conn.prepareStatement("select f from a1 where dBlob =?)");
st11.setBlob(1,is,BYTES.length);
dBlobはBLOBデータ型です。 また、BYTESはBLOBデータ型です。
しかし、私はこのクエリを実行すると、私は次の例外を取得:
によって引き起こさ:ERROR 42818:「BLOB」と「BLOB」の間の比較はサポートされていません。 タイプは同等でなければなりません。文字列型も照合順序が一致している必要があります。共同 llationが一致しない場合は、可能な解決策は、
(VARCHAR AS CAST(TABL ENAME(128))= 'T1' sys.systables FROMテーブル名を選択など) にデフォルトの照合を、それらを強制的にオペランドをキャストすることです
この問題を回避するためにクエリを作成するにはどうすればよいですか?私はまた、変換使って試してみましたが、それはあまりにも動作しません
:
PreparedStatement st11 = conn.prepareStatement("select f from a1 where dBlob
=CONVERT(?,BINARY)");
st11.setBlob(1,is,BYTES.length);
はまた、中に渡される引数のデータ型を取得することは可能でしょうか?反射によって、または他の何らかの手段によって。
ありがとうブライアン。私はその問題を解決しました。 私はいくつかの理由でPreparedStatementで設定されているパラメータの型を比較しています。すべてのLOBに対して一般的な比較タイプを指定することは可能ですか、それともCLOB、BLOB、およびnCLOBの各データ型を個別に比較する必要がありますか? – krammer