多数のxmlファイルを作成し、それらを圧縮してファイルシステムに保存するJavaプログラムがあります。プログラムの後半で、同じ zip ファイルを Oracle データベースの BLOB 列に配置したいと考えています。問題は、それを行う方法がわからないことです。データを読み取ったり、データを操作したりする必要はありません。永続的な中央ストレージ用のデータベースに移動するだけです。
ありがとう!
多数のxmlファイルを作成し、それらを圧縮してファイルシステムに保存するJavaプログラムがあります。プログラムの後半で、同じ zip ファイルを Oracle データベースの BLOB 列に配置したいと考えています。問題は、それを行う方法がわからないことです。データを読み取ったり、データを操作したりする必要はありません。永続的な中央ストレージ用のデータベースに移動するだけです。
ありがとう!
これを行うにはいくつかの方法がありますが、PreparedStatement.setBinaryStream
おそらく最良の方法です。
public void saveFileToDatabase(File file) {
InputStream inputStream = new FileInputStream(file);
Connection conn = ...;
PreparedStatement pS = conn.prepareStatement(...);
...
pS.setBinaryStream(index, inputStream, (int) file.length());
...
pS.executeUpdate();
}
Connection
(簡単にするために、 、 、PreparedStatement
およびを閉じるために必要な try/catch のものは含めていませんが、それを行う必要があることに注意してくださいInputStream
。)
このようにすると、一度にメモリにロードする必要なく、データがファイルからデータベースにストリーミングされます。
メソッドを使用しようとしていると思いますsetBytes()
:
したがって、本文がバイトのストリームである電子メールを表すテーブルの例は次のようになります。
PreparedStatement ps = con.prepareStatement(
"INSERT INTO Image (ID, Subject, Body) VALUES (2,?,?)");
ps.setString(1, subject);
byte[] bodyIn = {(byte)0xC9, (byte)0xCB, (byte)0xBB,
(byte)0xCC, (byte)0xCE, (byte)0xB9,
(byte)0xC8, (byte)0xCA, (byte)0xBC,
(byte)0xCC, (byte)0xCE, (byte)0xB9,
(byte)0xC9, (byte)0xCB, (byte)0xBB};
ps.setBytes(2, bodyIn);
int count = ps.executeUpdate();
ps.close();
getBytes()
圧縮された XML オブジェクトの呼び出しを簡単に変換できると仮定しています。