1

我有一个 Java 程序,它创建许多 xml 文件,然后将它们压缩并保存到文件系统中。稍后在程序中,我想将相同的 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();
}

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

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

于 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 回答