ImageVerifierCode 换一换
格式:DOC , 页数:32 ,大小:75KB ,
资源ID:3107298      下载积分:12 金币
快捷注册下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

开通VIP
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.zixin.com.cn/docdown/3107298.html】到电脑端继续下载(重复下载【60天内】不扣币)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

开通VIP折扣优惠下载文档

            查看会员权益                  [ 下载后找不到文档?]

填表反馈(24小时):  下载求助     关注领币    退款申请

开具发票请登录PC端进行申请

   平台协调中心        【在线客服】        免费申请共赢上传

权利声明

1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。

注意事项

本文(使用JAVA读取ORACLE-BLOB字段实现上传下载.doc)为本站上传会员【丰****】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4009-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表

使用JAVA读取ORACLE-BLOB字段实现上传下载.doc

1、 使用JAVA读取ORACLE BLOB字段实现上传下载 大对象类型BLOB全称为Binary Large Objects,即二进制大对象。可以把BLOB区别为三种形式:声像数据、二进制数据和大文本数据。因此,最常见的应用就是存储图形、声音等对象,此外大二进制对象、OLE对象也可以通过BLOB类型存入数据库,如果文本对象过大,超出了文本类型的规定长度,则必须用BLOB字段进行存储。我们在经常使用的编程环境中并不能直接支持BLOB字段,因此需要调用相应的函数完成BLOB的使用。 二 实际Struts项目的处理流程 1 插入BLOB字段的流程 表示层: 上传使用struts的

2、ml:file property="drawingFile"/>标签,提交给指定处理的Action,在ActionForm中使用struts自带的FormFile 来保存文件。 核心代码: ....省略 控制层: 在Action中将传入的ActionForm中的文件字段赋给VO值对象,并调用业务代理类的上传方法。 核心代码:  

3、       //新增         if(actionType.equals("insert")) {             //得到文件类型             int iFileType = this.getFileType(drawingInputForm.getFileExtendName());             if(iFileType == 0) {                 //不支持文件类型                 this.addError(request, "drawing.errors.upload.UnSupportedFil

4、eType");             } else {                 DrawingVO objDrawingVO = new DrawingVO();                 //图纸基本属性                 objDrawingVO.setDrawingName(drawingInputForm.getDrawingName());                ...省略其他set方法                 //执行新增(上传)                 int iRt = objDrawingMan.inser

5、tDrawing(objDrawingVO);                 ...省略         } Facade门面: 通过业务代理类调用DAO中的上传方法,对客户端完全透明。     public int insertDrawing(DrawingVO drawingVO) throws ComtopModuleException {         try {             DrawingDAO drawingDAO = new DrawingDAO();             return drawingDAO.insertDrawing(

6、drawingVO);         } catch(DrawingException ex) {             throw new ComtopModuleException("drawing.errors.insert", ex);         }     } 持久层: DAO中实现和ORACLE数据库的底层交涉,完成真正的文件上传。 需要先插入一个空BLOB对象,然后Update这个空对象。     public int insertDrawing(DrawingVO drawingVO) throws DrawingException {       

7、  PreparedStatement pstmt = null;         Statement stmt = null;         Connection conn = null;         int iKey = 0;         ResultSet rs = null;         //定义SQL语句         String strSQLInsert = null;         String strSQLUpdate = null;         try {             conn = dataSource.getConnec

8、tion();             conn.setAutoCommit(false);             //插入空BLOB,empty_blob(),其中表中的Content是BLOC类型字段             strSQLInsert =                 "insert into PROD_DRAWING (DRAWING_ID, DRAWING_NAME, 省略..." +                 "CONTENT)" +                 "values (?, ?, 省略..., empty_blob())";  

9、           //得到待处理文件             FormFile drawingFile = drawingVO.getDrawingFile();             //插入普通字段             pstmt = conn.prepareStatement(strSQLInsert);             //得到主键             iKey = Toolkit.getInstance().getNextKey(DrawingInfo.ID_STORE_KEY_DRAWING);             pstmt.setInt(1

10、 iKey);             ....省略其他set方法             pstmt.executeUpdate();             stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,                    ResultSet.CONCUR_UPDATABLE);             strSQLUpdate =                 "SELECT CONTENT FROM PROD_DRAWING WHERE DRAWING_ID ='"

11、 +                 iKey + "'" + " FOR UPDATE";             //读出记录以增加图片Blob字段             rs = stmt.executeQuery(strSQLUpdate);             if(rs.next()) {                 logger.debug("开始写入BLOB");                 //这里不能用oracle.sql.BLOB,会报ClassCast异常                 weblogic.jdbc.vendor.oracle

12、OracleThinBlob blob = (weblogic.jdbc.vendor.                     oracle.                     OracleThinBlob)rs.getBlob(1);                 logger.debug("得到输出流");                 OutputStream outStream = blob.getBinaryOutputStream();                 InputStream fin = drawingFile.getInputStream(

13、);                 logger.debug("开始分配缓存");                 byte[] b = new byte[blob.getBufferSize()];                 int len = 0;                 while((len = fin.read(b)) != -1) {                     logger.debug("正在写入BLOB流");                     outStream.write(b, 0, len);                

14、}                 logger.debug("关闭所有流");                 fin.close();                 outStream.flush();                 outStream.close();             }             rs.close();             mit();         } catch(Exception ex) {         ...省略         }finally {             DBUtil.destroyD

15、B(rs, pstmt, conn);         }         return iKey;     } 2 读取BLOB字段的流程 从数据库中读出BLOB数据没有上述由于连接池的不同带来的差异,程序流程同插入BLOB字段,但是读BLOB就不用那么复杂了,只需要J2SE的标准类java.sql.Blob就可以取得输出流。 DAO中的核心代码:     public DrawingVO readDrawing(int drawingId) throws DrawingException {         PreparedStatement pstmt = nul

16、l;         Connection conn = null;         DrawingVO objDrawingVO = null;         ResultSet rs = null;         //定义SQL语句         String strSQL = "SELECT * FROM PROD_DRAWING WHERE DRAWING_ID=?";         try {             conn = dataSource.getConnection();             pstmt = conn.prepareState

17、ment(strSQL);             //设置参数             pstmt.setInt(1, drawingId);             //执行查询             rs = pstmt.executeQuery();             while(rs.next()) {                 objDrawingVO = new DrawingVO();                 objDrawingVO.setDrawingId(rs.getInt("DRAWING_ID"));               

18、  objDrawingVO.setDrawingName(rs.getString("DRAWING_NAME"));                ...省略其他set方法                 //set BLOB到VO中                 objDrawingVO.setContent(rs.getBlob("CONTENT"));             }         } catch(Exception ex) {             ...省略         }finally {             DBUtil.destro

19、yDB(rs, pstmt, conn);         }         return objDrawingVO;     } 这样,传到Action中VO对象就包含这个BLOB对象了,然后需要在Action中对该对象转为输入流,可以选择文件输出流或Servlet输出流,根据具体情况定,这里选择文件输出流。 核心代码:     private String getBlobToFile(Blob blob, DrawingVO objDrawingVO) throws Exception {         InputStream ins = blob.getBinarySt

20、ream();         //用文件模拟输出流         String strFileName = objDrawingVO.getDrawingName() + "." +                              objDrawingVO.getFileExtendName();         String strRootFilePath = this.getServlet().getServletContext().getRealPath("");         String strFilePath = "/temp/" + strFileNam

21、e;         String contextFilePath = strRootFilePath + strFilePath;        //定义文件对象         File file = new File(this.getServlet().getServletContext().getRealPath("") + "/temp");         if(!file.exists()) {             file.mkdir();         }         //定义输出流         OutputStream fout = new F

22、ileOutputStream(contextFilePath, true);         //下面将BLOB数据写入文件         byte[] b = new byte[1024];         int len = 0;         while((len = ins.read(b)) != -1) {             fout.write(b, 0, len);         }         //依次关闭         fout.close();         ins.close();         return strFi

23、lePath;     } 最后,在Action中调用这个私有方法,完成读取操作。 import   java.io.*;    import   java.sql.*;                public   class   BlobOperation      {      public   static   void   addLob(long   id,   String   binFile)   throws   SQLException      {      Connection   con   =   null;     

24、 PreparedStatement   ps   =   null;      ResultSet   rs   =   null;           try      {      con   =   ConnectionFactory.getConnection();   //换成你自己取连接的方法      con.setAutoCommit(false);           String   sql   =   "INSERT   INTO   Blob_Tbl(id,   binfile,   bincontent)";      sql   +=   "  

25、 VALUES(?,   ?,   ?)";      ps   =   con.prepareStatement(sql);           ps.setLong(1,   id);      ps.setString(2,   binFile);      ps.setBlob(3,   oracle.sql.BLOB.empty_lob());           ps.executeUpdate();      //DatabaseUtils.closeObject(ps);           ps   =   con.prepareStatement("SE

26、LECT   bincontent   FROM   Blob_Tbl   WHERE   id   =   "   +   id   +   "   for   update   ");      rs   =   ps.executeQuery();           if   (rs.next())      {      oracle.sql.BLOB   binContent   =   (oracle.sql.BLOB)   rs.getBlob(1);           /*   write   blob   content   */      OutputS

27、tream   binOut   =   binContent.getBinaryOutputStream();      BufferedOutputStream   out   =   new   BufferedOutputStream(binOut);      BufferedInputStream   in   =   new   BufferedInputStream(new   FileInputStream(binFile));      int   c;      while   ((c   =   in.read())   !=   -1)      {   

28、   out.write(c);      }      in.close();      out.close();      }      mit();      }   catch   (Exception   e)      {      e.printStackTrace();      try      {      con.rollback();      }   catch   (SQLException   se)      {      }      throw   new   SQLException(e.getMessage());   

29、  }   finally      {      DatabaseUtils.closeObject(rs,   ps,   con);      }      }           public   static   void   fetchLob(long   id,   String   filename)   throws   SQLException      {      Connection   con   =   null;      Statement   st   =   null;      ResultSet   rs   =   null;  

30、         try      {      con   =   ConnectionFactory.getConnection();           String   sql   =   "SELECT   *     From   Blob_Tbl   Where   id   =   "   +   id;      st   =   con.createStatement();           rs   =   st.executeQuery(sql);      while   (rs.next())      {           Strin

31、g   binFile   =   rs.getString("binfile");      oracle.sql.BLOB   binContent   =   (oracle.sql.BLOB)   rs.getBlob("bincontent");           /*   read   blob   content   */      BufferedOutputStream   out   =   new   BufferedOutputStream(new   FileOutputStream(filename));      BufferedInputStream

32、   in   =   new   BufferedInputStream(binContent.getBinaryStream());           int   c;      while   ((c   =   in.read())   !=   -1)      {      out.write(c);      }      in.close();      out.close();      }           }   catch   (Exception   e)      {      throw   new   SQLException(e.

33、getMessage());      }   finally      {      DatabaseUtils.closeObject(rs,   st,   con);      }      }           public   static   void   main(String[]   args)   throws   Exception      {      if   (args.length   ==   0)      {      addLob(1,   "a.jpg");      }   else      {      fetchL

34、ob(1,   args[0]);      }      }      }    package com.semovy.test; import java.io.BufferedInputStream; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream;

35、 import java.io.InputStreamReader; import java.io.OutputStream; import java.io.PrintWriter; import java.io.Reader; import java.sql.Blob; import java.sql.Clob; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import ja

36、va.sql.SQLException; import java.sql.Statement; /**  *  * @author semovy 测试向oracle 读,写文件Blob 读,写大文本Clob  */ public class OracleBlobTest {  private String driver = "oracle.jdbc.driver.OracleDriver";  private String url = "jdbc:oracle:thin:@localhost:1521:teckotooling";  private String u

37、ser = "scott";  private String pwd = "tiger";  public OracleBlobTest() {  }  public static void main(String[] args) {   OracleBlobTest obt = new OracleBlobTest();   obt.writeBlob();   obt.readBlob();   obt.writeClob();   obt.readClob();  }  /**   * 读二进制文件   *   */  private void

38、 readBlob() {   Connection conn = null;   try {    conn = getConnection();    Statement stmt = conn.createStatement();    ResultSet rs = stmt.executeQuery("select * from test where id=1");    byte[] buffer = new byte[1024];    OutputStream out = new FileOutputStream("d:/360安全卫士定1.exe");    i

39、nt tempLen = 0;    int amount = 0;    if (rs.next()) {     Blob blob = rs.getBlob("BINARYCONTENT");     InputStream in = blob.getBinaryStream();     while ((tempLen = in.read(buffer)) != -1) {      out.write(buffer, 0, tempLen);      amount += tempLen;      System.out.println("已经读出并写:" + amo

40、unt + " 字节");     }     System.out.println("已经读出并写:完成");     out.flush();     out.close();     in.close();     rs.close();     stmt.close();    }   } catch (ClassNotFoundException e) {    System.out.println(e.getLocalizedMessage());   } catch (SQLException e) {    System.out.println(e.ge

41、tLocalizedMessage());   } catch (IOException e) {    System.out.println(e.getLocalizedMessage());   } finally {    try {     if (conn != null)      conn.close();    } catch (SQLException e) {     System.out.println(e.getLocalizedMessage());    }   }  }  /**   * 写二进制文件   *   */  priv

42、ate void writeBlob() {   Connection conn = null;   try {    conn = getConnection();    conn.setAutoCommit(false);    String sql = null;    Statement stmt = conn.createStatement();    sql = "delete from test where id=1";    stmt.executeUpdate(sql);    sql = "insert into test(1,BINARYCONTENT,

43、CLOBCONTENT) values(1,empty_blob(),empty_clob())";    stmt.executeUpdate(sql);    ResultSet rs = stmt.executeQuery("select * from test where id=1");    if (rs.next()) {     Blob blob = rs.getBlob("BINARYCONTENT");     OutputStream out = ((oracle.sql.BLOB) blob).setBinaryStream(0);// 从0开始,否则写出的文

44、件有差错     int bufferSize = ((oracle.sql.BLOB) blob).getBufferSize();     System.out.println("bufferSize :" + bufferSize);     BufferedInputStream in = new BufferedInputStream(       new FileInputStream("d:/360安全卫士定.exe"), bufferSize);     byte[] b = new byte[bufferSize];     int count = in.read

45、b, 0, bufferSize);     int amount = 0;     while (count != -1) {      out.write(b, 0, count);      amount += count;      System.out.println("处理了 " + amount + " 字节");      count = in.read(b, 0, bufferSize);      System.out.println("处理了 " + amount + " 字节,成功");     }     out.close();     out

46、 = null;     in.close();     mit();    }   } catch (ClassNotFoundException e) {    System.out.println(e.getLocalizedMessage());   } catch (SQLException e) {    try {     conn.rollback();    } catch (SQLException e1) {     System.out.println(e1.getLocalizedMessage());    }    System.o

47、ut.println(e.getLocalizedMessage());   } catch (IOException e) {    System.out.println(e.getLocalizedMessage());   } finally {    try {     if (conn != null)      conn.close();    } catch (SQLException e) {     System.out.println(e.getLocalizedMessage());    }   }  }  /**   * 读大文本

48、  *   */  private void readClob() {   Connection conn = null;   try {    conn = getConnection();    Statement stmt = conn.createStatement();    ResultSet rs = stmt.executeQuery("select * from test where id=2");    String tempStr = null;    if (rs.next()) {     Clob clob = rs.getClob("CLOB

49、CONTENT");     if (clob != null) {      Reader in = clob.getCharacterStream();      BufferedReader br = new BufferedReader(in);      System.out.println("开始读....");      while ((tempStr = br.readLine()) != null) {       System.out.println(tempStr);      }      System.out.println("读完成....");      in.close();     }     rs.close();     stmt.close();    }   } catch (ClassNotFoundException e) {    System.out.println(e.getLocalizedMessage());   } catch (SQLException e) {    System.out.println(e.getLocalizedMessage());   } catch (IOException e) {    System.out

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服