我有一个Java程序,它创建了许多xml文件,然后将它们压缩并将它们保存到文件系统中。稍后在程序中我想将相同的zip文件放入我的oracle数据库的blob列中。问题是我不知道该怎么做。我不需要阅读它或对数据做任何事情,只需将其移动到数据库以进行持久的中央存储。
谢谢!
答案 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内容来关闭Connection
,PreparedStatement
和InputStream
,但您需要这样做。 )
通过这种方式,数据将从文件流式传输到数据库,而无需一次性加载到内存中。
答案 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()
。