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

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

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

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

我想你正在寻找使用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()