1

多数のxmlファイルを作成し、それらを圧縮してファイルシステムに保存するJavaプログラムがあります。プログラムの後半で、同じ zip ファイルを Oracle データベースの BLOB 列に配置したいと考えています。問題は、それを行う方法がわからないことです。データを読み取ったり、データを操作したりする必要はありません。永続的な中央ストレージ用のデータベースに移動するだけです。

ありがとう!

4

2 に答える 2

1

これを行うにはいくつかの方法がありますが、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。)

このようにすると、一度にメモリにロードする必要なく、データがファイルからデータベースにストリーミングされます。

于 2010-08-18T23:01:50.647 に答える
0

メソッドを使用しようとしていると思います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 オブジェクトの呼び出しを簡単に変換できると仮定しています。

于 2010-08-18T22:47:24.010 に答える