在Java中用oracle的Blob

转载 2006年06月07日 23:08: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()生成一个输入流,再写入一个文件就行了。

 

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对象实现文件的上传和下载 2007-06-26 11:13   JAVA存取CLOB和BLOB方法 oracle大对象保存 java将blo...

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

java不能直接想插入其他普通类型数据一样插入blob字段数据,因为blob相当于一个大文件块,里面有游标,需要初始化blob游标才能插入数据。所以我们要先插入一个空的blob数据,以初始化游标,然后...

从 Oracle 大字段(blob,clob)的读、写认识 Java JDBC操作全攻略

JDBC(Java Database Connectivity) 是 Sun 公司提供的一套通过对各个数据库厂商提供的函数进行整合和抽象的一族数据库操作类。 它们是Java2标准平台版本的一部分。JD...

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

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

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

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

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

转自:http://www.blogjava.net/zhangqingping/articles/JAVA.html 近期,在给客户做一个Demo页面时,需要用JAVA读取Oracle中的blob...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:在Java中用oracle的Blob
举报原因:
原因补充:

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