如何在Java中将zip文件移动到blob列?

时间:2010-08-18 22:30:55

标签: java oracle zip inputstream java-io

我有一个Java程序,它创建了许多xml文件,然后将它们压缩并将它们保存到文件系统中。稍后在程序中我想将相同的zip文件放入我的oracle数据库的blob列中。问题是我不知道该怎么做。我不需要阅读它或对数据做任何事情,只需将其移动到数据库以进行持久的中央存储。

谢谢!

2 个答案:

答案 0 :(得分: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();
}

(请注意,为简单起见,我没有包含任何必要的try / catch内容来关闭ConnectionPreparedStatementInputStream,但您需要这样做。 )

通过这种方式,数据将从文件流式传输到数据库,而无需一次性加载到内存中。

答案 1 :(得分: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();

我假设您可以轻松转换Zipped XML对象的调用getBytes()