文章探索:   分类:    关键字:  
  + 栏目导航
  + 相关文章
JSP随机数/Javascript随机数
利用XMLHTTP无刷新获取数据
JSP白皮书
在jsp中发送email
为什么jsp不能取代servlet?
jsp的5个不足之处
JSP技巧:发送动态图像
用JSP操作Cookie
简易成绩查询系统
用JSP创建WAP应用
在Windows/NT上建立JSP环境
用jsp连接数据库大全
如何成为一个优秀的JSP程序员
ASP与JSP的比较
处理表单数据
JSP及语法概要
处理Cookie
jsp文件操作之写入篇
一个可以防止刷新的JSP计数器
jsp计数器代码
JSP简明教程
在Java中使用Oracle blob
JSP入门初级教程之预定义变量的使用
在JSP中使用JavaMail(2)
在JSP中使用JavaMail
JSP/Servlet的重定向技术综述
JSP 语法详解(2)
JSP 语法详解(1)
数据库的连接与关闭


技术教程 -> JSP教程 ->  
在Java中使用Oracle blob
来源:转载   人气:1452   录入时间:2007-11-8
    Oracle中的lob (Large Object)可以存储非常大的数据(可能是4GB),这样就可以通过将文件或其它任何对象序列化成字节输出流(OutputStream)后写入数据库,之后使用字节输入流(InputStream)将数据读出然后反序列化为原始文件或对象。操作时需要使用oracle的JDBC包,它扩展了sun的JDBC包中的Blob对象。同时需要注意一些细节。下面的代码演示如何使用blob(实例中需要Oracle的JDBC包)。
   
   import oracle.jdbc.OracleResultSet; // 使用Oracle的ResultSet对象
   import oracle.sql.BLOB; // 使用Oracle的BLOB对象,而不是sun的Blob
   
   ...
   
   try{
   Connection conn=<数据库连接>;
   File file=<存入数据库的文件对象>;
   conn.setAutoCommit(false); // 取消Connection对象的auto commit属性
   String file_name=file.getName();
   
   // 数据库中有一个item表,其中的file_name (varchar2)存储文件名,file_blob (blob)存储文件对象
   String sql="INSERT INTO item (file_name,file_blob) VALUES ('" + file_name + "',EMPTY_BLOB())"; // 使用“EMPTY_BLOB()“成生一个空blob
   Statement stmt=conn.createStatement();
   int count=stmt.executeUpdate(sql);
   
   sql="SELECT file_blob FROM item WHERE iid='" + iid + "' FOR UPDATE"; // 使用“FOR UPDATE”得到表的写锁
   ResultSet rs=stmt.executeQuery(sql);
   rs.next();
   BLOB blob=((OracleResultSet)rs).getBLOB("file_blob"); // 得到BLOB对象
   OutputStream out=blob.getBinaryOutputStream(); // 建立输出流
   InputStream in=new FileInputStream(file); // 建立输入流
   int size=blob.getBufferSize();
   byte[] buffer=new byte[size]; // 建立缓冲区
   int len;
   while((len=in.read(buffer)) != -1)
   out.write(buffer,0,len);
   in.close();
   out.close();
   
   conn.commit();
   }
   catch(Exception ex){
   try{
   conn.rollback();
   }
   catch(SQLException sqle){
   System.err.println(sqle.getMessage());
   }
   }
   
   如果要读出文件的话只需调用BLOB的getBinaryStream()生成一个输入流,再写入一个文件就行了。
   
   




Copyright(C)2007-2021 广州市佳沛数码科技有限公司 版权所有
公司地址: 广州市荔湾区东漖北路560号511室
电话:020-81803473 传真:020-81544987