网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > 数据库 > Oracle教程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
数据库:数据库教程,数据库技巧,Oracle教程,MySQL教程,Sybase教程,Access教程,DB2教程,数据库安全,数据库文摘
本月文章推荐
.如何学习Oracle?分清几个概念是关.
.OracleDBA讲座笔记1--- 教师介.
.转一个很好的Oracle贴子.
.设置不使用spfile.
.Oracle10g中SCN与TimeStamp的相互.
.将oracle设为归档模式启动的方法.
.Oracle 9与Oracle 8中CPU_COSTIN.
.关于 SELECT N 问题.
.如何查看数据库的各种数据文件?.
.甲骨文参加泛珠三角区域软件产业.
.通过意向锁多粒度封锁机制进行并.
.Oracle 常用SQL查询列表.
.autoconf手册(九).
.如何使用Ruby脚本调用Oracle存储.
.PL/SQL中如何传递字符串变量给in.
.ORACLE8.1.7+TOMCAT3.2.1安装手册.
.Oracle Rman/tivoli-TDP/下数据恢.
.如何返回指定行数之间的查询结果.
.详细解释ODBC或BDE,ADO 和 OLE DB.
.监视未使用索引.

在Java中使用Oracle blob

发表日期:2008-2-9



  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()生成一个输入流,再写入一个文件就行了。
上一篇:使用oradim恢复windows上的数据库 人气:694
下一篇:支持Web的OLAP 人气:618
浏览全部Oracle教程的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐