2013-05-09 6 views
6

現在、Oracle for DB2で開発されたアプリケーションの検証中です。私たちは2つの別々のソースを維持したくないので、blobをフィールドに挿入するためにいくつかのクエリが必要です。これはoracleとdb2の両方で機能します。私はアプリケーションが動作しているDBを区別するための識別子を持っていません。DB2とOracleの両方でjavaを使用してBLOBを挿入

oracleにはutl_raw.cast_to_raw、DB2にはCAST() as BLOBが使用されていますが、これらは相互に互換性がありません。

答えて

6

何らかのキャストを使用する一般的なSQLを見つけることはできません。しかし、あなたはUPDATE文でJDBCのsetBinaryStream()

PreparedStatement pstmt = connection.prepareStatement(
    "insert into blob_table (id, blob_data) values (?, ?)"; 

File blobFile = new File("your_document.pdf"); 
InputStream in = new FileInputStream(blobFile); 

pstmt.setInt(1, 42); 
pstmt.setBinaryStream(2, in, (int)blobFile.length()); 
pstmt.executeUpdate(); 
connection.commit(); 

を使用できsetBinaryStream()同じ方法を使用して「プレーン」SQLでこれを行うことができます。

+0

私はString型の変数の中にデータを持っています。 StringをBinaryStreamに変換することで上記のメソッドを使用するのはいいですか? – Saju

+0

@サジュ:どのように*バイナリ*ラージオブジェクトを文字列として持つことができますか?その列の実際のデータ型(Oracleなど)は何ですか?もし 'CLOB'(' BLOB'ではなく)の場合、 'setBinaryStream()'の代わりに 'setCharacterStream()'を使うべきです。 –

+0

@SajuはおそらくOracleのNCLOB、DB2のDBCLOBを意味します。 – WarrenT