欢迎您来到GIS动力

加入收藏 免费注册 用户登陆 帮助中心
首页 新闻动态 技术专栏 银杏树下 学习考研 软件下载 求职招聘 许愿瓶 节日祝福 用户中心 精彩推荐 资源搜索 地图
专栏导航: AO开发 | SO开发 | ArcGIS桌面 | 超图桌面 | 开发语言 | 数据库 | WebGIS | 银杏文学 | 研究生考题 | FreeMap 谈天说地
   您现在位于: 首页技术专栏数据库 → 正文
Java中使用Oracle blob
07-10-18 09:40:21 作者:半块点心 出处:本站原创
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()生成一个输入流,再写入一个文件就行了。
(本文已被浏览 次)
发布人:admin
推荐给好友:发送给好友
上篇新闻:
下篇新闻:
相关评论
发表我的评论
  • 尊重网上道德,遵守《全国人大常委会关于维护互联网安全的决定》及中华人民共和国其他各项有关法律法;
  • 本站有权保留或删除您发表的任何评论内容;
  •   相关文章  

    关于我们 友情链接 ┋ 与我在线 ┋ 管理 ┋ TOP
    网站当前版本:GisPower CMS V3.0
    『GIS 动力』- http://www.gispower.org/
    联系我们:webmaster#gispower.org
    Copyright (c) 2003-2007 GisPOwer.Org. All Rights Reserved.

                   滇ICP备05006901号