在Java中使用Oracle blob

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());
 }
}
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值