`

操作Clob时抛出Blob may not be manipulated from creating session.

阅读更多

程序上需要将数据库Clob字段转换为String,传到前台显示。因此对Pojo添加了一个String型中间字段用于Clob的转换。

问题就出在这里,我们调用了Hibernate.createClob(xxx)将一个String转为Clob用于对象的保存。

但事实上,Hibernate.createClob创建出来的Clob对象与直接从数据库查询出来的Clob对象类型是不同的。

数据库查询出来的Clob与数据库驱动实现具体相关。而createClob返回的是ClobImpl(hibernate的实现)。

 

翻看ClobImpl的源码,发现hibernate对一些常用的方法,如getSubString(...)等根本没有实现,而是直接丢一个异常出来(Blob may not be manipulated from creating session).

 

结论,使用Hibernate.createClob创建的Clob对象可以用于保存,但不适用于进一步的操作。(比如调用clob.getSubString字段)。

 

 

注:调用getSubString是为了将Clob转换为String,用于页面显示。实际上后来发现了一种替代方案。ClobImpl对getSubString没有实现,但对getCharacterStream是有实现的,因此可以使用下面的代码:

try {
			String tmpStr = "";
			StringBuffer sb = new StringBuffer();
			BufferedReader br = new BufferedReader(bigColOri.getCharacterStream());
			while ((tmpStr=br.readLine())!=null){
				sb.append(tmpStr);
			}
			return sb.toString();
		} catch (java.sql.SQLException e1) {
			e1.printStackTrace();
			return null;
		} catch (java.io.IOException e2) {
			e2.printStackTrace();
			return null;
		}
 
0
8
分享到:
评论

相关推荐

    CLOB、BLOB___CLOB与BLOB的区别

    CLOB、BLOB 与 CLOB 与 BLOB 的区别 CLOB(Character Large OBject)是一种数据库类型,用于存储大型字符对象。它是 SQL 类型,用于存储字符大对象(Character Large Object),将字符大对象存储为数据库表某一行中...

    利用spring的jdbcTemplate处理blob、clob

    spring 中对大数据的处理,包括clob,blob的数据。比之jdbc下简便很多。

    DELPHI的CLOB和BLOB存取处理.zip_DELPHI的CLOB和BLOB存取处理_hallzgz

    在数据库编程领域,CLOB(Character Large Object)和BLOB(Binary Large Object)是用于存储大量文本和二进制数据的数据类型。在DELPHI中,处理这些大型对象时需要特殊的技术和策略。本篇文章将深入探讨DELPHI中...

    Oracle导出Clob,Blob工具

    Oracle数据库在处理大对象(LOB)类型,如Clob(Character Large Object)和Blob(Binary Large Object)时,有时需要专门的工具来进行高效且安全的数据导出。这些字段通常存储大量的文本或二进制数据,比如长篇文档...

    Hibernate对Blob,Clob的操作

    Reader reader = clob.getCharacterStream(); // 读取字符流,例如转换为字符串 ``` 值得注意的是,Blob和Clob对象通常占用大量内存,因此在读取数据后应尽快关闭流资源,以避免内存溢出。 另外,由于Blob和Clob...

    JDBC中操作Blob、Clob等对象 实例详细 非常详细

    ### JDBC中操作Blob、Clob等对象实例详解 #### 一、引言 在Java数据库连接(JDBC)中,Blob(Binary Large Object)和Clob(Character Large Object)是用于存储大型二进制对象和文本对象的数据类型。这两种数据...

    Mybatis 处理 CLOB、BLOB 类型数据

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

    Hibernate对BLOB CLOB操作

    在Java的持久化框架Hibernate中,BLOB(Binary Large Object)和CLOB(Character Large ...在处理BLOB时,需要特别注意内存管理和文件I/O操作的效率,而对于CLOB,通常以字符串形式处理,避免不必要的转换和格式问题。

    BLOB和CLOB的区别以及在ORALCE中的插入和查询操作

    3. 处理方式:对BLOB进行操作时,通常涉及二进制文件的读写,例如图片的上传和下载。CLOB操作则更偏向于文本内容的处理,如文本编辑、搜索等。 在Oracle数据库中,插入和查询BLOB和CLOB对象有特定的方法: 1. 插入...

    oracle(blob转换为clob)

    在某些情况下,可能需要将BLOB类型的数据转换为CLOB类型,例如,在处理文本数据时,如果数据被错误地存储为BLOB,或者需要将二进制数据中的可读文本部分提取出来进行处理。本文将详细介绍如何使用Oracle内置函数和...

    Blob和Clob使用例子

    在Hibernate,一个流行的Java对象关系映射(ORM)框架中,Blob和Clob也被广泛使用,特别是在处理大型图片、文件或长文本时。 在Hibernate和Microsoft SQL Server的环境中,Blob常用来存储图像、音频、视频等二进制...

    Oracle8i对Blob和Clob类型的操作

    在Oracle SQL*Plus环境中,可以使用以下代码操作BLOB或CLOB: ```sql DECLARE lob_loc BLOB; file_in BFILE := BFILENAME('DIRECTORY_NAME', 'FILE_NAME'); BEGIN DBMS_LOB.CREATETEMPORARY(lob_loc, TRUE); ...

    JDBC中操作Blob、Clob等对象

    ### JDBC中操作Blob、Clob等对象 #### 一、简介 在JDBC(Java Database Connectivity)编程中,Blob和Clob是非常重要的数据类型。Blob(Binary Large Object)主要用于存储二进制大对象,如图像、音频文件等;而Clob...

    mysql和Oracle在对clob和blob字段的处理

    查询`CLOB`和`BLOB`字段时,MySQL会根据需要加载部分或全部数据到内存,这可能导致I/O性能的影响。 2. Oracle对`CLOB`和`BLOB`的处理: Oracle数据库提供了`CLOB`和`BLOB`数据类型,同样用于存储大量文本和二进制...

    修改clob blob 字段

    修改clob blob 字段 修改clob blob 字段 修改clob blob 字段

    clob-blob.rar_blob and clob_clob_java CLOB_java oracle cl_oracle

    标题"Clob-blob.rar_blob and clob_clob_java CLOB_java oracle cl_oracle"暗示了这个压缩包包含的资源是关于使用Java操作Oracle数据库中的CLOB和BLOB字段的示例代码。这个压缩包可能包含了一个名为`clob-blob.java`...

    load blob clob

    本篇文章将围绕"load blob clob"这一主题,结合anysql免费工具合集,详细介绍如何在Oracle中操作Blob和Clob字段,并分享一些实用技巧。 首先,Blob数据类型在Oracle中代表Binary Large Object,它可以存储任意形式...

    Hibernate操作Oarcle中Clob、Blob字段小结

    总之,理解并熟练掌握Hibernate对Oracle中的Clob和Blob字段的操作,是Java开发人员在处理大数据时必不可少的技能,这有助于确保数据的正确存储和高效访问。通过阅读和分析提供的源码,我们可以更深入地理解其底层...

    关于在Hibernate中对于Clob,Blob字段的处理方法

    String text = clob.getSubString(1, (int) clob.length()); ``` 总结起来,在Hibernate中处理Oracle数据库中的Clob和Blob字段,主要涉及以下几个步骤: 1. 在实体类中定义Clob和Blob字段,并使用`@Lob`注解。 2. ...

Global site tag (gtag.js) - Google Analytics