Как переместить почтовый файл в столбец BLOB в Java? - PullRequest
1 голос
/ 19 августа 2010

У меня есть программа на Java, которая создает несколько файлов XML, а затем архивирует их и сохраняет в файловой системе. Позже в программе я хочу поместить этот же zip-файл в столбец BLOB-объектов моей базы данных Oracle. Проблема в том, что я не уверен, как это сделать. Мне не нужно читать или что-либо делать с данными, просто переместить их в базу данных для постоянного центрального хранилища.

Спасибо!

Ответы [ 2 ]

1 голос
/ 19 августа 2010

Есть несколько способов сделать это, но 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();
}

(Обратите внимание, что для простоты я не включил ни одного из необходимых элементов try / catch длязакрытие Connection, PreparedStatement и InputStream, но вам необходимо это сделать.)

После этого данные будут перенаправлены из файла в базу данных без необходимости загрузки вв память все сразу.

0 голосов
/ 19 августа 2010

Я думаю, что вы хотите использовать метод 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() для вашего объекта Zipped XML.

...