最近在做表数据的插入和抽取时,遇到一个
NCLOB
类型的字段,其检索结果在几番尝试时,总是出现该字段值抽出为
NULL
,或者是只有该值的前面一部分
[dbms_lob.substr(TX)]
,或者是缓存不够
[TO_CHAR(TX)]
等等问题,于是开始百度。由于一年前好像也遇到过这种类型的字段,但是当时没能让自己有足够意识来引起注意。以下分享是自己在网上找来的一些相关资料以及自己处理这个问题的解决方法
[TO_NCLOB(TX)]
,希望对大家也有所帮助。
一、
blob
、
clob
、
nclob
是什么意思?
1
.它们都是
oracle
数据库中的大对象数据类型,
oracle
提供专门的包对其操作。
2
.
blob
、
clob
、
nclob
是三种大型对象
(LOB)
,用来保存较大的图形文件或带格式的文本文件,如
Miceosoft Word
文档,以及音频、视频等非文本文件,最大长度是
4GB
。
3
.
LOB
有几种类型,取决于你使用的字节的类型,
Oracle 8i
实实在在地将这些数据存储在数据库内部保存。可以执行读取、存储、写入等特殊操作。
4
.
CLOB(Character Large Object)
用于存储对应于数据库定义的字符集的字符数据。(类似于
long
类型)
5
.
BLOB(Binary Large Object)
可用来存储无结构的二进制数据。(类似于
row
和
long row
)
二、
LOB
的
BLOB
、
CLOB
、
BFILE
有什么区别,都用在什么情况?怎样操作?
BLOB
----
内部二进制大对象。
CLOB
----
内部字符大对象。
NCLOB ----
内部定长多字节字符大对象。
BFILE
----
外部二进制文件。
LOB
由两部分组成:数据(值)和指向数据的指针(定位器)。尽管值与表自身一起存储,但是一个
LOB
列并不包含值,仅有它的定位指针。更进一步,为了使用大对象,程序必须声明定位器类型的本地变量。当
LOB
(除了
BFILE
)被创建时,定位器被存放在列中,值被存放在
LOB
段中,
LOB
段是在数据库内部表的一部分。当
BFILE
被创建时,定位器如同平常一样存储在列中。
三、
blob
和
clob
最大是多少?还是没有最大限制?
它们的最大上限就是
4G
,
Clob
可以存储单字节字符数据,
Blob
可以存储无结构的二进制数据。
下面是我解决该字段的插入和抽取时的代码案例,通过
assertEquals()
的判定,插入值和抽取值一致,
Junit
测试通过
:
public void test_01_TxtEjlog() throws Exception {
TxtEjlog txtEjlog = new TxtEjlog();
String insert_ejlog_sql =
" INSERT INTO TXT_ELOG "
+ " (GUID, "
+ " STOREID, "
+ " TXID, "
+ " TX) "
+ " VALUES(?, ?, ?, ?)";
String select_ejlog_sql =
" SELECT "
+ " GUID,"
+ " STOREID, "
+ " TXID, "
+ " TO_NCLOB(TX) TX "
+ " FROM "
+ " TXT_ELOG "
+ " WHERE "
+ " GUID = '6161' "
+ " AND STOREID = '6' ";
req.put("guid", "6161");
req.put("storeID", "6");
req.put("txID", "61");
StringBuilder strTest = new StringBuilder("大对象数据类型的正常系测试xx");
for (int i = 0; i < 900; i++) {
strTest.append("大对象数据类型的正常系测试xx大对象数据类型的正常系测试xx");
}
req.put("tx", strTest.toString());
txtEjlog.setReq(req);
txtEjlog.setConf(conf);
Class.forName("oracle.jdbc.driver.OracleDriver");
txtEjlog.setConnection(DriverManager.getConnection("jdbc:oracle:thin:@192.168.33.333:1521:orcl", "test", "test_03"));
try {
// 业务处理
txtEjlog.executeLocal();
} finally {
txtEjlog.close();
}
TxtEjlogBean ejlogBean = txtEjlogBean.getConnection().selectFirst(select_ejlog_sql, TxtEjlogBean.class);
assertEquals("6161", ejlogBean.getGuid());
assertEquals(6, ejlogBean.getStoreID());
assertEquals(61, ejlogBean.getTxID());
assertEquals(strTest.toString(), ejlogBean.getTx());
}
分享到:
相关推荐
- 存储机制:MySQL的`TEXT`和`BINARY`系列数据类型通常存储在数据页中,而Oracle的`CLOB`和`BLOB`可以存储在表空间中,允许更大的数据量。 - 索引支持:Oracle支持对`CLOB`和`BLOB`字段建立索引,而MySQL的索引...
Oracle数据库系统支持对大型数据对象(LOBs,Large Objects)的操作,这包括BLOB、CLOB、NCLOB和BFILE四种类型。每种类型都有其特定的用途和特性,适用于存储不同类型的大数据。 1. BLOB(Binary Large Object): ...
在Oracle数据库中,`CLOB`(Character Large Object)是一种用于存储大量文本数据的数据类型。由于其能够存储非常大的文本块(最大可达4GB),因此常被用于存储文章、报告或任何其他大型文本内容。然而,在处理CLOB...
BLOB是一种可以存储大量二进制数据的对象,分为四种子类型:BLOB、CLOB、NCLOB和BFILE。在Oracle中,BLOB用于存储二进制数据,如照片;而在MySQL中,BLOB也有类似的分类,包括TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB...
Oracle数据库在存储大对象(BLOB)数据时,提供了高效且灵活的方式,使得二进制数据如图片、文档等能够安全地保存在数据库中。批量导出Oracle数据库中的BLOB字段生成图片,是一项常见的需求,尤其对于那些需要将...
在Oracle数据库中,Blob与Clob(Character Large Object)、Bfile和Nclob一同构成了大对象类型。 Clob是用来存储字符数据,同样最大可达到4GB,适用于文本内容。Bfile则是一种外部LOB,它存储在数据库外部的文件...
JDBC读写Oracle的CLOB字段
Oracle 也支持大对象:BLOB、CLOB、NCLOB 等。例如,Oracle 中的 BLOB 和 CLOB 可以提供 4GB 的空间,而 DB2/400 中的 BLOB 和 CLOB 只能存放 2GB 的数据。 五、ROWID 类型 Oracle 中的 ROWID 虚拟列用于对表中的...
这些数据类型通常用于存储大量的文本数据(Clob)和二进制数据(Blob),例如长篇文章、图片或音频文件。在Oracle数据库中,Hibernate提供了与这些数据类型的交互方式。本篇将详细介绍在Hibernate中如何处理Clob和...
5. LONG: 用于存储长字符串,最大长度可达 2GB,但不支持字符串搜索,已被 BLOB、CLOB 和 NCLOB 等大对象类型逐渐取代。 6. RAW(n) 和 LONG RAW: 二进制数据类型,RAW 用于存储较小的二进制文件,最大长度为 2000 ...
本文将详细介绍 Oracle 中的基本数据类型,并讨论它们的特点和使用区别。 字符类型 Oracle 中有多种字符类型,包括 char、varchar、varchar2、long 等。 * char(n):定长字符串,最大长度为 2000 字节。char ...
本文将深入探讨SQL Server与Oracle中的数据类型区别,并通过具体的例子来说明这两种系统之间的转换方法。 ### SQL Server 数据类型 SQL Server 是微软开发的一款关系型数据库管理系统,它支持多种数据类型,可以...
在Java的持久化框架Hibernate中,处理大数据类型如Oracle数据库中的Clob(Character Large Object)和Blob(Binary Large Object)字段是一项重要的任务。Clob通常用于存储大量的文本数据,而Blob则适用于二进制...
Oracle也支持大对象:BLOB、CLOB、NCLOB等。DB2/400中的BLOB和CLOB只能存放2GB的数据,而Oracle中的BLOB和CLOB可以提供4GB的空间。 五、ROWID类型 Oracle中的ROWID虚拟列用于对表中的某一列进行唯一标示,DB2/400...
随着技术发展,Long类型正逐渐被BLOB、CLOB和NCLOB等大对象数据类型取代。 6. **Raw(n)**: 用于存储固定长度的二进制数据,最大长度为2000字节,适用于小型图形或格式化文本文件。与Long一样,它也在逐渐被淘汰,被...
同时,Oracle的NCLOB和BFILE等非BLOB/CLOB类型用于存储特定类型的字符数据和大文件,这些在Java中也需要特殊处理。 在实际开发中,理解这些数据类型对应关系有助于编写高效的SQL查询,避免类型不匹配导致的错误。...
然而,这两种数据库管理系统之间的数据类型并不完全相同,本文将对 Oracle 和 DB2 数据类型进行分类对应说明,以便更好地理解和应用这两种数据库管理系统。 一、日期和时间类型 Oracle 中的 DATE 类型包含年、月、...
在Oracle 10g中,CLOB数据类型的处理有时会遇到一些挑战,尤其是在与ORM框架结合使用时。以下将详细介绍相关知识点: 1. **CLOB类型**:CLOB是一种非二进制大对象,用于存储大量字符数据,最大可达到4GB。Oracle 10...
Oracle 和 SQL 数据类型是数据库管理系统中用于定义和存储数据的基础组件。它们决定了数据的结构、大小以及如何进行处理。以下是两种数据库系统中主要数据类型的详细比较: **Oracle 数据类型** 1. **Char**: Char...