如何通过struts以oci协议将文件上传到oracle数据库的blob字段

原创 2003年02月13日 09:53:00

Class文件如下:

import java.io.*;
import java.sql.*;
import java.util.Date ;
import oracle.sql.*;
import javax.servlet.http.*;
import org.apache.struts.action.*;
import org.apache.struts.upload.*;

public class UploadAction extends Action
{
  public ActionForward execute(ActionMapping mapping,
                               ActionForm form,
                               HttpServletRequest request,
                               HttpServletResponse response)
      throws Exception {
    if (form instanceof UploadForm) {
      Date date = new Date();
      System.out.println("-------------File Upload Begins-------------------") ;
      UploadForm theForm = (UploadForm) form;
      file://通过struts的FormFile类来获得上传的文件,前台jsp页面对应的代码
      file://<html:file property="theFile" />
      FormFile file = theForm.getTheFile();
     
      Connection conn = null;
      PreparedStatement ps = null ;

      String union_Id = "" ;
      String union_Version = "" ;
      union_Id = theForm.getUnion_Id() ;
      union_Version = theForm.getUnion_Version() ;
      file://actionpart是数据库表中的字段名,由于表中有多个blob字段,所以用变量来表示其名称
      String actionpart = theForm.getActionpart() ;
      System.out.println("actionpart is:"+actionpart) ;
      file://取得数据库连接,dbPool的源代码附在后面
      dbPool dbp = new dbPool();
      conn = dbp.getConnection() ;

      ResultSet BlobDetails = null;
      Statement stmt = null;

      try {
        InputStream stream = null;
        FileInputStream fstream = null;
        stream = file.getInputStream();
        System.out.println("------------uploadFileSize is : "+stream.available() +"------------") ;

        conn.setAutoCommit(false);
        stmt = conn.createStatement();
        file://先用empty_blob()来初始化该字段
        sql = " update regunion set " + actionpart + "  = empty_blob() where  union_id= " + union_Id +" and  union_Version = "+ union_Version;
        stmt.executeUpdate(sql) ;
        conn.commit() ;
        stmt.close() ;
        stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);
        sql = "select " +actionpart + " from regunion where union_id= " + union_Id +" and  union_Version = "+ union_Version + " for  update ";
        BlobDetails = stmt.executeQuery(sql);

        if (BlobDetails.next()) {
          BLOB l_mapBlob = (BLOB)BlobDetails.getBlob(1);
          OutputStream l_blobOutputStream = ((BLOB) l_mapBlob).getBinaryOutputStream();

          byte[] l_buffer = new byte[10* 1024];

          int l_nread = 0;
          while ((l_nread=stream.read(l_buffer)) != -1) // Read from file
            {
            l_blobOutputStream.write(l_buffer,0,l_nread); // Write to Blob
            }

          stream.close();
          l_blobOutputStream.close ();
        }
        BlobDetails.close();
        conn.commit() ;
      }
      catch (FileNotFoundException fnfe) {
        fnfe.printStackTrace() ;
        return mapping.findForward("error");
      }
      catch (IOException ioe) {
        ioe.printStackTrace() ;
        return mapping.findForward("error");;
      }
      catch(SQLException ex){
        ex.printStackTrace() ;
        return mapping.findForward("error");;
      }finally{
        if(conn != null){
          try{
            stmt.close();
            conn.close() ;
          }catch(Exception sqle){
            sqle.printStackTrace() ;
          }
        }
      }


      request.setAttribute("union_Id",union_Id) ;
      request.setAttribute("union_Version",union_Version) ;
      System.out.println("-------------File Upload Ends-------------------") ;
      return mapping.findForward("success");
    }else{
      return null;
    }
  }
}

附:dbPool.java程序

package com.prient.nbsc.unifylaw;
import java.sql.*;
import com.prient.nbsc.common.DBPOOL;
public class dbPool {
  public Connection getConnection(){
    try {
      Connection conn = null;
      Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
      String bridge = "jdbc:oracle:thin:@10.6.89.2:1521:sjk";
      conn = DriverManager.getConnection(bridge,"user","user") ;
      return  conn;
    }
    catch (Exception e) {
      System.out.println(e);
      return null;
       }
  }
}

 

将Oracle中Blob字段存储的图片转换成字节流直接输出到浏览器

具体代码如下: //  输出 blob  字段图片  (传入 blob 类型的 obj 对象) public static void outPutBlobImg(Object obj,HttpSer...
  • abc_email
  • abc_email
  • 2016年01月27日 15:33
  • 5113

上传图片至服务器,写入到数据库Blob字段中,以及从数据库读取Blob信息(iframe父子页面传值)(1)

最近做了个用户维护功能,涉及到照片的操作。 照片是存到数据库oracle中的Blob字段中。 难点有两个: 1,图片的上传;2,Blob字段的读取。   先说图片的上传吧...
  • Shirley_John_Thomas
  • Shirley_John_Thomas
  • 2016年09月11日 19:33
  • 1156

Kettle 生成的XML格式数据保存到Oracle 数据库的BLOB类型字段中

Kettle编写的Trans脚本在直接处里读取dawenben
  • jdk2006
  • jdk2006
  • 2014年05月26日 15:33
  • 3544

批量导出ORACLE数据库BLOB字段生成文件

  • 2017年12月16日 20:00
  • 99KB
  • 下载

用uploadfile组件实现动态文件上传到ORACLE数据库

uploadfile组件是apache开发的用于文件上传的Java组件。笔者经过研究,终于实现了动态多文件向数据库上传,现将示例程序介绍如下:   1.组件:笔者使用的是commons-upload...
  • Zhiyuan_Ma
  • Zhiyuan_Ma
  • 2016年12月24日 17:40
  • 273

JDBC操纵Oracle数据库中的BLOB字段

  • 2012年09月10日 15:16
  • 85KB
  • 下载

java对oracle数据库中blob字段的处理

  • 2013年01月16日 10:48
  • 951B
  • 下载

struts2文件上传(保存为BLOB格式)

struts2文件上传(保存为BLOB格式)html文件:提供上传文件的入口xml文件:          success_commit.jsp error.jsp action文件:publi...
  • u012093968
  • u012093968
  • 2014年09月16日 14:19
  • 205

struts2文件上传(保存为BLOB格式)

html文件:提供上传文件的入口
  • e_real
  • e_real
  • 2014年11月10日 10:36
  • 307

c++写入oracle数据库blob字段,读取blob到本地文件

写入本地文件到数据库 void DlgImpRoadSection::OnOkBtnClicked() { #pragma region 验证 CString tempStr; ...
  • zy332719794
  • zy332719794
  • 2012年03月29日 14:59
  • 3987
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:如何通过struts以oci协议将文件上传到oracle数据库的blob字段
举报原因:
原因补充:

(最多只允许输入30个字)