程序上需要将数据库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;
}
分享到:
相关推荐
spring 中对大数据的处理,包括clob,blob的数据。比之jdbc下简便很多。
JDBC中操作Blob、Clob等对象 实例详细JDBC中操作Blob、Clob等对象 实例详细JDBC中操作Blob、Clob等对象 实例详细JDBC中操作Blob、Clob等对象 实例详细JDBC中操作Blob、Clob等对象 实例详细JDBC中操作Blob、Clob等...
CLOB、BLOB___CLOB与BLOB的区别
rt,出现这种情况,可以更换下hibernate核心包 即可解决
DELPHI的CLOB和BLOB存取处理
Mybatis 处理 CLOB、BLOB 类型数据
Oracle导出Clob,Blob等大字段工具,自己写的工具,方便大家下载使用
修改clob blob 字段 修改clob blob 字段 修改clob blob 字段
oracle的jdbc驱动程序,用这个版本的操作Clob,blob类型的数据很方便。 博文链接:https://zhenjw.iteye.com/blog/173419
JDBC中操作Blob、Clob等对象
UTL_RAW.CAST_TO_VARCHAR2
oracle Blob转换Clob
weblogic下转换oracle 的clob类型经常报转型错误,本例子通过反射解决weblogic.jdbc.wrapper.Clob_oracle_sql_CLOB转型成oracle.sql.CLOB问题
使用Hibernate映射Blob,Clob字段,并对这些字段完成存,取功能
Hibernate对BLOB CLOB操作,详细的操作说明
BLOB和CLOB的区别以及在ORALCE中的插入和查询操作
前两个例子的Demo 博文链接:https://zhangguanzhong.iteye.com/blog/623489
oracle中的Blob和Clob区别,希望对大家学习有帮助呵
CLOB与BLOB的存储与读取,String与CLOB的想换转换,字节码文件的存储与读取等等
Oracle导出Clob,Blob工具 ,支持导出CLob工具版本2,解决上个版本导出时间有问题的bug