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

 

java 操作oracle的blob类型数据

保存clob字段,可以像这样:   Clob clob=con.createClob();   clob.setString(1, new String(lineWKT));   pre.set...
  • LanSeTianKong12
  • LanSeTianKong12
  • 2016年07月01日 10:28
  • 645

Java Oracle数据库BLOB字段的存取

Oracle的Blob字段比较特殊,他比long字段的性能要好很多,可以用来保存例如图片之类的二进制数据。  写入Blob字段和写入其它类型字段的方式非常不同,因为Blob自身有一个curs...
  • dhdhxgx
  • dhdhxgx
  • 2015年05月22日 11:56
  • 2909

jsp页面通过java调用oracle blob字段显示图片

项目中的图片资源一般建议存储到独立的静态服务器中。为了不让图片、文档等文件资源管理零碎,不能被有心人事删除,最好选择存储oracle的大字段blob类型。这里对于java怎么存储、获取blob类型不多...
  • u010769276
  • u010769276
  • 2013年06月09日 17:10
  • 2086

java操作Oracle大数据类型BLOB的存取

条件准备 Oracle数据库中有表如下 CREATE TABLE BOOK( ID NUMBER PRIMARY KEY, F BLOB );  ConnectionManager类不...
  • wh1066034
  • wh1066034
  • 2011年08月15日 08:06
  • 1030

java oracle blob 读写操作

java oracle blob 读写操作 (mybatis,hibernate)
  • WD4871
  • WD4871
  • 2016年05月18日 14:19
  • 1092

使用java程序update oracle 中 blob 字段

String sql1 = "select f.editor_xml exml from t_sys_flow_info f where f.id in ("+infoId+") for update...
  • haiyang4988
  • haiyang4988
  • 2016年12月06日 14:45
  • 709

java读取oracle数据库中blob字段

测试表create table TEST_IMG ( ID INTEGER not null, NAME VARCHAR2(32), IMAGE BLOB );说明:1、使用JDB...
  • itmyhome
  • itmyhome
  • 2015年01月29日 21:33
  • 6026

在Java中用oracle的Blob

Oracle中的lob (Large Object)可以存储非常大的数据(可能是4GB),这样就可以通过将文件或其它任何对象序列化成字节输出流(OutputStream)后写入数据库,之后使用字节输入...
  • aixiangtouzhu
  • aixiangtouzhu
  • 2006年06月08日 11:11
  • 538

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

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

java hibernate 映射和注解oracle含有blob字段的数据表的pojo源码

java hibernate 映射和注解oracle含有blob字段的数据表的pojo源码
  • baohuan_love
  • baohuan_love
  • 2013年12月16日 18:29
  • 1932
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:在Java中用oracle的Blob
举报原因:
原因补充:

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