最近搞的Hibernate集成oracle817,读取Clob字段时一直报错:
io 异常: 类型长度大于最大值;
百度、google大家都说是驱动问题,换了N个驱动一样的错误,官网oracle817的驱动是.zip的,搞得不知怎么用,总是加载不到驱动,直接解压到classes文件中,报错:
java.lang.AbstractMethodError
最后看到oracle的jdbc目录下有demo,终于找到了正解:
// 读取CLOB字段 static String dumpClob(Connection conn, CLOB clob) throws Exception { String clobStr = ""; CallableStatement cstmt1 = (CallableStatement) conn .prepareCall("begin ? := dbms_lob.getLength (?); end;"); CallableStatement cstmt2 = (CallableStatement) conn .prepareCall("begin dbms_lob.read (?, ?, ?, ?); end;"); cstmt1.registerOutParameter(1, Types.NUMERIC); cstmt1.setClob(2, clob); cstmt1.execute(); long length = cstmt1.getLong(1); long i = 0; int chunk = 10; while (i < length) { cstmt2.setClob(1, clob); cstmt2.setLong(2, chunk); cstmt2.registerOutParameter(2, Types.NUMERIC); cstmt2.setLong(3, i + 1); cstmt2.registerOutParameter(4, Types.VARCHAR); cstmt2.execute(); long read_this_time = cstmt2.getLong(2); String string_this_time = cstmt2.getString(4); clobStr += string_this_time; // System.out.print("Read " + read_this_time + " chars: "); // System.out.println(string_this_time); i += read_this_time; } cstmt1.close(); cstmt2.close(); return clobStr; }
//读取BOLB static void fillBlob(Connection conn, BLOB blob, long length) throws Exception { CallableStatement cstmt1 = (CallableStatement) conn .prepareCall("begin dbms_lob.write (?, ?, ?, ?); end;"); long i = 0; long chunk = 10; byte[] data = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; while (i < length) { cstmt1.setBlob(1, blob); cstmt1.setLong(2, chunk); cstmt1.setLong(3, i + 1); data[0] = (byte) i; cstmt1.setBytes(4, data); cstmt1.execute(); i += chunk; if (length - i < chunk) chunk = length - i; } cstmt1.close(); }
这种问题感觉应该比较常见,在网上竟没有解决方法,特此记录一下,供遇到同样问题的人员参考。
相关推荐
把oracle数据库中字段类型为clob的字段值以字符串的形式读取出来
关于在oracle数据库中读取clob大字段问题
ibatis 读取oracle clob类型
java读取oracle数据库中clob字段 把oracle数据库中字段类型为clob的字段值以字符串的形式读取出来
今天小编就为大家分享一篇Python如何应用cx_Oracle获取oracle中的clob字段问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
简单写的一个小工具,把图片存入oracle中,按clob和blob两种方式存储,并读取图片
Oracle slq bolb转换Base64 CLOB
oracle中使用jdbc读写clob字段,很多细节介绍,内容全面。
通过jdbc读取oracle数据库的clob类型的字段转换为string类型
主要是整合了jdbc处理clob类型的增删改查方法,有需要的同学可以看下
BLOB是指二进制大对象也就是英文Binary Large Object的所写,而CLOB是指大字符对象也就是英文Character Large Object的所写。其中BLOB是用来存储大量二进制数据的;CLOB用来存储大量文本数据。BLOB通常用来保存...
用hibernate和jdbc读存blob或clob
本文实例简述了PHP处理Oracle的CLOB的方法。分享给大家供大家参考。具体方法如下: 1. 写入数据 在使用PDO的预处理方法时,如果使用bindParam()等而不指定字段的数据类型或使用execute(),PDO都会默认为string...
kettle通过java代码将数据库blob 字段抽取到本地文件
主要介绍了Java读取Oracle大字段数据(CLOB)的2种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
java对oracle大字段读取类,因项目需求要对大字段进行存取,在网上搜集了些,自己加工了些。用起来很方便!
下面以程序实例说明通过JDBC操纵Oracle数据库LOB类型字段的几种情况。 先建立如下两个测试用的数据库表,Power Designer PD模型如下: 建表SQL语句为:CREATE TABLE TEST_CLOB ( ID NUMBER(3), CLOBCOL CLOB)CREATE
不需要运行Oracle数据库软件,ODU直接读取数据库文件解析数据。 支持ASM,能够直接从ASM磁盘中导出数据,即使相关的磁盘组不能成功mount 支持从ASM中直接抽取出数据文件和其他任意存储在ASM中的文件(包括控制文件...