首  页
站长信箱
868搜索
网站登录
免费计数器
免费留言本
IP来源查询
网站技术教程
网站流量统计
文章探索:   分类:    关键字:  
    什么?你还在找兼职?上兼客吧,现在兼客吧平台太火了,知名度和诚信度也很高,注册就送0.5元现金,满3元就能提现,马上到账了!最低3元就能提现,大家可以注册下试试!注册地址:http://www.jiankeba.com/computeryc1688
  + 栏目导航
  + 相关文章
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
来源:转载   人气:4123   录入时间:2006/2/3


    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()生成一个输入流,再写入一个文件就行了。
   
   



| 网站转让 | 站长信箱 | 网站登录 | 技术教程 | 免费计数器 | 免费留言本 | 868流量统计 | 好帮手网站营销 |
地址:广东省阳江市  联系电话:13725641179 杨先生
Copyright 2004-2019 868资源网- 版权所有    粤ICP备05007330号