在Java中使用Oracle blob

转载 2006年06月16日 01:29:00

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

相关文章推荐

使用java JDBC方式操作oracle blob类型数据

/**      *      * @param query    表示sql语句      * @param idForQuery 标识主键      * @param value  表示...

java中如何读取ORACLE中BLOB字段存储的图片

本文转载于 李森的百度 在java中想要读取BLOB字段中图片主要解决办法就是将其写入到java流中,下面就贴上前段我自己项目中的一个例子,希望能对大家有所帮助~~~           ...

Oracle,Clob,Blob数据存取的Java代码

  • 2010年08月30日 10:43
  • 2.38MB
  • 下载

oracle_java_blob

  • 2009年06月04日 12:55
  • 1.08MB
  • 下载

JAVA读取Oracle中的blob图片字段并显示

整个流程分为四步,连接oracle数据库 -> 读取blob图片字段 -> 对图片进行缩放 ->把图片展示在jsp页面上。下面进行详细描述:1. java连接Oracle注:数据库是Oracle10g...

java操作Oracle中的BLOB和CLOB代码示例

一、区别和定义       LONG: 可变长的字符串数据,最长2G,LONG具有VARCHAR2列的特性,可以存储长文本一个表中最多一个LONG列   LONG RAW: 可变长二进制数据,最长...
  • e_wsq
  • e_wsq
  • 2011年12月13日 20:12
  • 417

JAVA完全控制Oracle中BLOB、CLOB说明

网络上很多关于JAVA对Oracle中BLOB、CLOB类型字段的操作说明,有的不够全面,有的不够准确,甚至有的简直就是胡说八道。最近的项目正巧用到了这方面的知识,在这里做个总结。   环...

java向Oracle数据库中插入blob字段数据

java不能直接想插入其他普通类型数据一样插入blob字段数据,因为blob相当于一个大文件块,里面有游标,需要初始化blob游标才能插入数据。所以我们要先插入一个空的blob数据,以初始化游标,然后...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:在Java中使用Oracle blob
举报原因:
原因补充:

(最多只允许输入30个字)