用于从Java中的blob内容创建文件的代码段

Osc*_*Ryz 16 java blob jdbc

我有一些文件存储在Oracle 9的数据库blob列中.

我想将这些文件存储在文件系统中.

这应该很简单,但我找不到合适的剪辑.

我怎么能在java中这样做?

 PreparedStatement ptmst = ...
 ResutlSet rs = pstmt.executeQuery();
 rs.getBlob();
 // mistery 
 FileOutputStream out = new FileOutputStream();
 out.write(); // etc et c
Run Code Online (Sandbox Code Playgroud)

我知道它应该是类似的东西...我不知道是什么评价为

谢谢

编辑

我终于得到了大卫的问题.

这是我懒惰的实现:

PreparedStatement pstmt = connection.prepareStatement("select BINARY from MYTABLE");
ResultSet rs = pstmt.executeQuery();
while( rs.next() ) {
    Blob blob = rs.getBlob("BINARY");
    System.out.println("Read "+ blob.length() + " bytes ");
    byte [] array = blob.getBytes( 1, ( int ) blob.length() );
    File file = File.createTempFile("something-", ".binary", new File("."));
    FileOutputStream out = new FileOutputStream( file );
    out.write( array );
    out.close();
}
Run Code Online (Sandbox Code Playgroud)

Dav*_*low 22

您希望将blob作为输入流并将其内容转储到输出流.所以'苦难'应该是这样的:

Blob blob = rs.getBlob(column);
InputStream in = blob.getBinaryStream();
OutputStream out = new FileOutputStream(someFile);
byte[] buff = new byte[4096];  // how much of the blob to read/write at a time
int len = 0;

while ((len = in.read(buff)) != -1) {
    out.write(buff, 0, len);
}
Run Code Online (Sandbox Code Playgroud)

如果您发现自己正在进行大量的IO工作,那么您可能会考虑使用Apache Commons IO来处理细节.然后设置流后的所有内容都将是:

IOUtils.copy(in, out);
Run Code Online (Sandbox Code Playgroud)