将oracle表中大字段存放的二进制导出文件!

      将文件保存的方法通常在web系统中有几种方式。1、可以将文件上传到文件服务器,然后可以通过访问该文件地址下载或者查看。2、将文件进行二进制编码保存到数据库的大字段中。两种方式各有优缺点,这里就不在描述了。现在说明如何将第2种方式存放于数据库中的二进制编码导出文件。此处只写出关键代码,希望对需要进行如此操作的人有所帮助。

 

     String sql = "select f.fullfileid,f.fullfilename,f.fullfilesize,f.savedfile from file"  该sql中的字段  fullfilename保存的为该文件的文件名以及文件类型。 savedfile字段保存的则为文件的二进制编码。

     try {
   con = ConfigUtil.getConnection();
   stmtSelect = con.prepareStatement(sql);
   rs = stmtSelect.executeQuery();
   while (rs.next()) {
    
    String fullfileid = rs.getString("fullfileid");
    String fileName = rs.getString("fullfilename");
    input = rs.getBinaryStream("savedfile");
    
    String newFileName = startNumber + "__" + fullfileid + "__" +fileName;
       File file  = new File(downLoadPath + newFileName);

    file.createNewFile();
    fileStream = new FileOutputStream(file);
    
    int len = 0;   
             byte[] bytes = new byte[1024];  
             while ((len = input.read(bytes)) != -1) {   
              fileStream.write(bytes,0,len);   
             }
    fileStream.close();
    System.gc();
   }
   isSuccess = true;
  } catch (Exception e) {
   isSuccess = false;
   throw e;
  } finally {

      // 略 关闭链接 等操作

    }

 

代码中downLoadPath 变量为 生成文件保存的路径。代码如上面所述,但是往往要根据实际情况去实现。比如如果file表中文件很多数万或者几十万。则要考虑查询效率,可进行分页查询后导出。  记得循环中进行手动内存回收。防止可能常出现的内存溢出。   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值