数据库中提供了两种字段类型 Blob 和 Clob 用于存储大型字符串或二进制数据(如图片)。
Blob 采用单字节存储,适合保存二进制数据,如图片文件。
Clob 采用多字节存储,适合保存大型文本数据。
Oracle中处理BLOB/CLOB字段的方式比较特别,所以需要特别注意下面两点:
1. 在Oracle JDBC中采用流机制对 BLOB/CLOB 进行读写操作,所以要注意不能在批处理中读写 BLOB/CLOB字段,否则将出现
Stream type cannot be used in batching 异常。
2. Oracle BLOB/CLOB 字段本身拥有一个游标(cursor),JDBC通过游标对Blob/Clob字段进行操作,在Blob/Clob字段创建之前,无法获取其游标句柄,会出现
Connection reset by peer: socket write error 异常。
正确的做法是:首先创建一个空 Blob/Clob 字段,再从这个空 Blob/Clob字段获取游标,例如下面的代码:
PreparedStatement ps =
conn.prepareStatement(
" insert into PICTURE(image,resume) values(?,?)
" );
// 通过oralce.sql.BLOB/CLOB.empty_lob()构造空Blob/Clob对象
ps.setBlob(
1 ,oracle.sql.BLOB.empty_lob());
ps.setClob(
2 ,oracle.sql.CLOB.empty_lob());
ps.excuteUpdate();
ps.close();
// 再次对读出Blob/Clob句柄
ps
= conn.prepareStatement(
" select image,resume from PICTURE where id=? for update
" );
ps.setInt(
1 ,
100 );
ResultSet rs
= ps.executeQuery();
rs.next();
//得到java.sql.Blob对象后强制转换为oracle.sql.BLOB
oracle.sql.BLOB imgBlob
= (oracle.sql.BLOB)rs.getBlob(
1 );
oracle.sql.CLOB resClob
= (oracle.sql.CLOB)rs.getClob(
2 );
// 将二进制数据写入Blob
FileInputStream inStream
= new
FileInputStream( "
c://image.jpg "
);
OutputStream outStream
= imgBlob.getBinaryOutputStream();
byte [] buf
= new
byte [ 10240
];
int len;
while (len
= inStream.read(buf)
> 0 )
{
outStream.write(buf,
0 ,len);
}
inStream.close();
outStream.cloese();
//
将字符串写入Clob
resClob.putString(
1 ,
" this is a clob
" );
// 再将Blob/Clob字段更新到数据库
ps
= conn.prepareStatement(
" update PICTURE set image=? and resume=? where id=?
" );
ps.setBlob(
1 ,imgBlob);
ps.setClob(
2 ,resClob);
ps.setInt(
3 ,
100 );
ps.executeUpdate();
ps.close();
分享到:
相关推荐
MyBatis 处理 CLOB、BLOB 类型数据是指在使用 MyBatis 框架时,如何正确地处理大字段类型的数据。CLOB(Character Large OBject)和 BLOB(Binary Large OBject)都是大字段类型,用于存储大量的数据。 CLOB 类型...
在描述中提到的“Oracle导出Clob,Blob等大字段工具”就是为了解决这个问题而设计的,它是一个自编写的实用程序,方便用户导出和管理Oracle数据库中的大对象数据。 Oracle数据库中的Clob类型用于存储大量的文本数据...
在数据库管理中,存储非结构化数据...综上所述,`CLOB`和`BLOB`都是在Oracle中存储图片的有效方法,具体选择哪种方式取决于应用场景和需求。`ClobAndBlob`工具提供了一种便捷的方式来体验和比较这两种方式的使用效果。
Oracle数据库在存储大对象(BLOB)数据时,提供了高效且灵活的方式,使得二进制数据如图片、文档等能够安全地保存在数据库中。批量导出Oracle数据库中的BLOB字段生成图片,是一项常见的需求,尤其对于那些需要将...
在实际应用中,需要确保代码正确处理了不同数据库之间的数据类型差异,比如MySQL的TEXT到ORACLE的CLOB,同时考虑到大字段的处理。 总结来说,处理ORACLE数据库中的大字段数据时,应关注存储模式选择、批量操作、...
然而,在 Oracle8i 版本之前,对大字段 CLOB 仍然不支持在 where 子句直接的 Like 操作。这使得开发者无法直接对 CLOB 字段中的内容进行 Like 查找。幸运的是,通过使用 DBMS_LOB 包,我们可以实现对 CLOB 字段中的...
因此,"jdbc批量插入大字段"这个话题旨在探讨如何高效地通过Java JDBC来实现Blob字段的批量插入,以提高性能。 首先,我们需要了解JDBC(Java Database Connectivity),它是Java编程语言与各种数据库之间通信的...
本文将详细介绍如何在Oracle数据库中读取CLOB类型的字段,并提供一个示例代码片段来展示具体的实现过程。 #### CLOB的基本概念 CLOB是Oracle数据库提供的用于处理大量字符数据的一种特殊数据类型。它支持Unicode...
kettle通过java代码将数据库blob 字段抽取到本地文件
最近在用oracle的过程中用到了对blob字段模糊查询的问题,对oracle来说,我并不是高手,找了很多的资料终于能够查出来了。 blob字段直接用 select * from table_name where column like ‘%%'查找的时候是不能实现...
在10g版本中,ODI提供了处理大字段(如BLOB和CLOB类型)的能力,这在处理大量非结构化或半结构化数据时尤为重要。在"odi10g大字段知识模块"中,我们主要探讨的是如何在ODI环境中有效地管理和迁移这些大字段数据。 ...
### Spring与Hibernate处理大字段(CLOB/BLOB) 在企业级应用开发中,经常会遇到需要存储大量文本或二进制数据的情况,这时就需要用到数据库的大字段类型如CLOB(Character Large Object)和BLOB(Binary Large ...
Oracle数据库中的CLOB(Character Large Object)类型是用来存储大量字符数据的,比如长文本、XML文档等。在Java中,当我们需要通过JDBC(Java Database Connectivity)接口与Oracle数据库交互时,处理CLOB字段可能...
2. **文件系统存储**:大字段数据可以存储在文件系统中,然后在数据库中仅存储文件的路径或者URL。这种方式可以减轻数据库的压力,但需要管理文件系统与数据库的同步。 3. **流式处理**:当读写大数据字段时,可以...
一个完整的工程,主要功能为:spring+hbernate对clob、blob字段的处理 包括:数据脚本、典型的SSH框架处理,以及spring、hibernate数据批量保存等功能源码、所用到的lib包 数据环境为:oracle 10G 开发:Mycelipse5.1...
在处理大字段时,Hibernate提供了Blob和Clob类型的支持,用于存储大对象,如文本、图片等。 针对大字段的处理,通常有以下几种策略: 1. **字段分片**:如果一个字段过大,可以将其拆分为多个较小的字段存储,降低...
在实际开发中,推荐使用BLOB和CLOB字段来存储大数据,以充分利用Oracle数据库对大对象的支持和优化。 总之,OO4O提供了一种高效且灵活的方法来处理Oracle数据库中的大数据字段,使得在VC++环境下进行大数据操作变得...
在Hibernate中,我们通常使用`Blob`和`Clob`类型来映射这些大字段。 **一、Hibernate配置** 在Hibernate配置文件(hibernate.cfg.xml)中,确保已经正确设置了数据库连接参数,并且JDBC驱动支持大字段的处理。对于...
在IT领域,尤其是在数据库管理与查询中,遇到中文字符显示为乱码是一个常见的问题,尤其在使用PL/SQL Developer或类似工具查询Oracle数据库时。本文将深入探讨这一问题的成因,并提供有效的解决方案。 ### PL/SQL...
在合并之前,还需要特别关注那些包含大字段(如 BLOB 或 CLOB)的表,因为这些类型的字段需要特殊的处理方法。可以使用以下 SQL 语句来查找: ```sql SELECT segment_name, t.tablespace_name, t.segment_type FROM ...