使用JDBC保存文件到数据库

该函数实现把多个文件保存到ORACLE的pdfbak中其中pdffile为保存在其中的文件。

 public static void savaPDFtoDB(String fileNames[]){
  try{
   conn.setAutoCommit(false);
   for(int i=0;i<fileNames.length;i++){
    String filename= fileNames[i];
    if (filename.substring(filename.lastIndexOf(".") + 1)
      .equalsIgnoreCase("pdf")){
     String custnbr = filename.substring(0,filename.lastIndexOf("."));

     //插入空blob已备后面更新
     String sql   = "INSERT INTO PDFBAK" +
              "(custnbr,pdfname,pdffile)values" +
              "(?,?,?)"; 
     PreparedStatement ps = conn.prepareStatement(sql);

     ps.setString(1, custnbr);
     ps.setString(2, filename);
     ps.setBlob(3, BLOB.getEmptyBLOB());
     ps.executeUpdate();
     ps.close();

     //取出空BLOB
     String sqlquery="SELECT pdffile" +
         "  FROM PDFBAK" +
         " WHERE CUSTNBR= ?" +
         " FOR UPDATE";
     PreparedStatement psquery = conn.prepareStatement(sqlquery);
     psquery.setDate(1, custnbr);

     ResultSet rs = psquery.executeQuery();
     if(rs.next()){
      BLOB pdfblob = (BLOB)rs.getBlob("pdffile");

      //定义输出到空BLOB的流
      OutputStream outStream = pdfblob.getBinaryOutputStream();

      //定义输入流读取文件信息
      InputStream inputStream = new FileInputStream(mailpath+filename);
      byte[] fileByte = new byte[1024];

            //把输入流信息写到输出流中
            int fileLen = 0;
            while ((fileLen = inputStream.read(fileByte)) != -1) {
                outStream.write(fileByte,0,fileLen);
            }
            outStream.flush();   
            outStream.close();
            inputStream.close();
     }
     rs.close();
     psquery.close();
    }
   }
   conn.commit();
  }catch(Exception e){

   e.printStackTrace();
   System.out.println(e.getMessage());
   close();
   System.exit(-1);   
  }
 }

 

 

 

下面函数负责吧数据库中BLOB文件取出后进行还原

 public static void createCustPdf(Vector custnbrs){
  try{
   for(int i=0;i<custnbrs.size();i++){
    Vector temp      = (Vector)custnbrs.get(i);
    String custnbr   = (String)temp.get(0);
    String emailaddr = (String)temp.get(1);
    Date   stmtdate  = (Date)temp.get(2);
    String sql = "SELECT PDFFILE " +
        "  FROM s03s1_emailtoblobs" +
        " WHERE custnbr=?" 

    PreparedStatement ps = conn.prepareStatement(sql);
    ps.setString(1, custnbr);

    ResultSet rs = ps.executeQuery();
    boolean b_result = rs.next();
    if(b_result){

     //获取BLOB信息
     BLOB custpdf=(BLOB)rs.getBlob(1);

     //这次把BLOB信息对应到输入流中
     InputStream inStream = custpdf.getBinaryStream();

     //定义文件输出流
     FileOutputStream outStream = new FileOutputStream(custnbr+".pdf");

     byte[] fileByte = new byte[1024];
           int fileLen = 0;

           //BLOB信息写到文件中
           while ((fileLen = inStream.read(fileByte)) != -1) {
               outStream.write(fileByte,0,fileLen);
           }
           outStream.flush();   
           outStream.close();
           inStream.close();     
    }
    ps.close();
    rs.close();
   }
  }catch(Exception e){
   //出错处理

   e.printStackTrace();
   System.out.println(e.getMessage());
   close();

  }
 }

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值