`

Oracle中的大字段 Blob/Clob

阅读更多

数据库中提供了两种字段类型 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();
分享到:
评论
1 楼 future_9 2008-12-17  
CLOB字段里面能不能保存文本的换行信息呢?

相关推荐

    Mybatis 处理 CLOB、BLOB 类型数据

    MyBatis 处理 CLOB、BLOB 类型数据是指在使用 MyBatis 框架时,如何正确地处理大字段类型的数据。CLOB(Character Large OBject)和 BLOB(Binary Large OBject)都是大字段类型,用于存储大量的数据。 CLOB 类型...

    Oracle导出Clob,Blob工具

    在描述中提到的“Oracle导出Clob,Blob等大字段工具”就是为了解决这个问题而设计的,它是一个自编写的实用程序,方便用户导出和管理Oracle数据库中的大对象数据。 Oracle数据库中的Clob类型用于存储大量的文本数据...

    图片存入Oracle中,用clob和blob两种方式

    在数据库管理中,存储非结构化数据...综上所述,`CLOB`和`BLOB`都是在Oracle中存储图片的有效方法,具体选择哪种方式取决于应用场景和需求。`ClobAndBlob`工具提供了一种便捷的方式来体验和比较这两种方式的使用效果。

    批量导出ORACLE数据库BLOB字段生成图片

    Oracle数据库在存储大对象(BLOB)数据时,提供了高效且灵活的方式,使得二进制数据如图片、文档等能够安全地保存在数据库中。批量导出Oracle数据库中的BLOB字段生成图片,是一项常见的需求,尤其对于那些需要将...

    ORACLE数据库中插入大字段数据的解决方法

    在实际应用中,需要确保代码正确处理了不同数据库之间的数据类型差异,比如MySQL的TEXT到ORACLE的CLOB,同时考虑到大字段的处理。 总结来说,处理ORACLE数据库中的大字段数据时,应关注存储模式选择、批量操作、...

    Oracle如何对CLOB行字段来执行全文检索

    然而,在 Oracle8i 版本之前,对大字段 CLOB 仍然不支持在 where 子句直接的 Like 操作。这使得开发者无法直接对 CLOB 字段中的内容进行 Like 查找。幸运的是,通过使用 DBMS_LOB 包,我们可以实现对 CLOB 字段中的...

    jdbc批量插入大字段

    因此,"jdbc批量插入大字段"这个话题旨在探讨如何高效地通过Java JDBC来实现Blob字段的批量插入,以提高性能。 首先,我们需要了解JDBC(Java Database Connectivity),它是Java编程语言与各种数据库之间通信的...

    数据库读取clob字段

    本文将详细介绍如何在Oracle数据库中读取CLOB类型的字段,并提供一个示例代码片段来展示具体的实现过程。 #### CLOB的基本概念 CLOB是Oracle数据库提供的用于处理大量字符数据的一种特殊数据类型。它支持Unicode...

    kettle通过java代码将数据库blob 字段抽取到本地文件

    kettle通过java代码将数据库blob 字段抽取到本地文件

    关于oracle中clob字段查询慢的问题及解决方法

    最近在用oracle的过程中用到了对blob字段模糊查询的问题,对oracle来说,我并不是高手,找了很多的资料终于能够查出来了。 blob字段直接用 select * from table_name where column like ‘%%'查找的时候是不能实现...

    odi10g大字段知识模块

    在10g版本中,ODI提供了处理大字段(如BLOB和CLOB类型)的能力,这在处理大量非结构化或半结构化数据时尤为重要。在"odi10g大字段知识模块"中,我们主要探讨的是如何在ODI环境中有效地管理和迁移这些大字段数据。 ...

    spring+hibernate 解决大字段(clob)

    ### Spring与Hibernate处理大字段(CLOB/BLOB) 在企业级应用开发中,经常会遇到需要存储大量文本或二进制数据的情况,这时就需要用到数据库的大字段类型如CLOB(Character Large Object)和BLOB(Binary Large ...

    oracle数据库的clob大字段在jdbc中的处理方式

    Oracle数据库中的CLOB(Character Large Object)类型是用来存储大量字符数据的,比如长文本、XML文档等。在Java中,当我们需要通过JDBC(Java Database Connectivity)接口与Oracle数据库交互时,处理CLOB字段可能...

    spring1.2+hibernate2对大字段的处理实例

    2. **文件系统存储**:大字段数据可以存储在文件系统中,然后在数据库中仅存储文件的路径或者URL。这种方式可以减轻数据库的压力,但需要管理文件系统与数据库的同步。 3. **流式处理**:当读写大数据字段时,可以...

    spring+hbernate对clob、blob字段的处理

    一个完整的工程,主要功能为:spring+hbernate对clob、blob字段的处理 包括:数据脚本、典型的SSH框架处理,以及spring、hibernate数据批量保存等功能源码、所用到的lib包 数据环境为:oracle 10G 开发:Mycelipse5.1...

    spring1.2+hibernate3对大字段的处理实例,供大家学习与交流,可直接运行

    在处理大字段时,Hibernate提供了Blob和Clob类型的支持,用于存储大对象,如文本、图片等。 针对大字段的处理,通常有以下几种策略: 1. **字段分片**:如果一个字段过大,可以将其拆分为多个较小的字段存储,降低...

    用OO4O操作Oracle数据库的大数据字段 (1).pdf

    在实际开发中,推荐使用BLOB和CLOB字段来存储大数据,以充分利用Oracle数据库对大对象的支持和优化。 总之,OO4O提供了一种高效且灵活的方法来处理Oracle数据库中的大数据字段,使得在VC++环境下进行大数据操作变得...

    Hibernate操作数据库大字段的示例(附源码及详细开发使用方法)。

    在Hibernate中,我们通常使用`Blob`和`Clob`类型来映射这些大字段。 **一、Hibernate配置** 在Hibernate配置文件(hibernate.cfg.xml)中,确保已经正确设置了数据库连接参数,并且JDBC驱动支持大字段的处理。对于...

    plsql查询数据库时中文字段为乱解决方法.txt

    在IT领域,尤其是在数据库管理与查询中,遇到中文字符显示为乱码是一个常见的问题,尤其在使用PL/SQL Developer或类似工具查询Oracle数据库时。本文将深入探讨这一问题的成因,并提供有效的解决方案。 ### PL/SQL...

    Oracle多个表空间合并成一个表空间,验证通过

    在合并之前,还需要特别关注那些包含大字段(如 BLOB 或 CLOB)的表,因为这些类型的字段需要特殊的处理方法。可以使用以下 SQL 语句来查找: ```sql SELECT segment_name, t.tablespace_name, t.segment_type FROM ...

Global site tag (gtag.js) - Google Analytics