oracle的class12驱动没有实现jdbc对clob或blob的存储, 解决办法

在使用原生jdbc做保存大字段clob或者是blob时, 发生异常:
ERROR [pool-12-thread-1] PartitionConsumerThread.run(128) | java.lang.AbstractMethodError: Method oraclebc/driver/T4CPreparedStatement.setCharacterStream(ILjava/io/Reader;J)V is abstract
分析原因:

异常是说T4CPreparedStatement这个类调用的是一个抽象的方法,意思是它本身没有对jdbc的setCharacterStream进行实现。
我们框架用的数据库驱动用的是oracle.sql.class12, 存储大字段发生异常之后, 我去看了T4CPreparedStatement的源码, 他继承了OraclePreparedStatement, OraclePreparedStatement中有setCharacterStream, setClob, setBlob方法的实现, 但是与jdbc的setCharacterStream,setClob, setBlob方法的参数类型是不一样的,可以去看一下源码就懂了, 意思就是, OraclePreparedStatement或者T4CPreparedStatement都没有实现jdbc的setCharacterStream,setClob, setBlob方法, 只是继承了抽象的方法, 因此我们在调用时才会报前面的异常,
解决办法: 更换oracle驱动, 之后我把驱动换为了odjbc6, 同样去看了源码, 发现OraclePreparedStatement有对jdbc的PrepareStatement处理大字段方法的实现, 完美解决问题;

原文地址:https://blog.51cto.com/14306922/2392791

时间: 2024-11-05 16:53:10

oracle的class12驱动没有实现jdbc对clob或blob的存储, 解决办法的相关文章

Oracle SQL Developer报错:Unable to find a Java Virtual Machine解决办法

安装了64位的Oracle数据库以及32位的Oracle客户端,在开始菜单中第一次打开客户端的SQL Developer时提示输入java.exe的路径,我选择了Oracle数据库自带的jdk路径,确定之后报错: 百度查找解决办法,原因是64位的Oracle数据库中自带的jdk也是64位的,但安装的Oracle客户端是32位的,所以不兼容. 解决办法一般有两种做法: 1)从网上下载Oracle SQL Developer x64(http://www.oracle.com/technetwork

关于Mysql com.mysql.jdbc.StatementImpl$CancelTask内存泄漏问题及解决办法

近来在负责公司短信网关的维护及建设,随着公司业务发展对短信依赖越来越严重了,短信每天发送量也比以前每天40多w发送量暴增到每天达到200w发送量.因为是采用Java做发送底层,压力递增情况下不可避免的面对内存问题.在发送量接近200w情况下,出现内存泄露问题了. 经过对系统运行检查发现: 1)每次重启系统3-4个小时后,均发现一点不稳定: 2)在3-4个小时后,出现out of memory的错误:java.lang.OutOfMemoryError: GC overhead limit exc

oracle 登录 http://localhost:5560/isqlplus/login.uix 任意账号无法登陆的解决办法

问题: ORA-01045: user lacks CREATE SESSION privilege; logon denied 解决方法: grant create session,resource to <user> 或在pl/sql developer里,创建user时选择system privileges->create session 参考: ORA-01045: user lacks CREATE SESSION privilege; logon denied - kingl

Oracle修改表Table所属表空间及Clob、Blob字段的处理

我们会发现通过exp.imp导入库的表所属表空间还是导出时的表空间,那么假如我们导入的数据库表空间和导入时的数据库表空间不一致时就会比较麻烦,这里我们主要处理,已经导入的表所属表空间不是指向我们所要的表空间时如何修改. 1.查看表当前所属表空间 SELECT TABLE_NAME,TABLESPACE_NAME FROM USER_TABLES -- WHERE TABLE_NAME='test' --可以加上条件        比如我们看到我的库里有两个表表空间是USERS,而非我们自建的FC

java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver 错误的解决办法

java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver 错误的解决办法 (2011-05-05 16:08:05) 转载▼ 标签: 杂谈 分类: Oracle 出现这个问题,主要是驱动包没放到项目里,解决办法如下: 1.找到oracle里的jdbc\lib: 2.设置系统的 classpath 为 ojdbc14.jar.class12.jar: 3.把这两个jar拷贝到你的项目里的 \WEB-INF\lib 下: 4.

java:Oracle(事务,分页,jdbc)

1.事务:transaction -- 事务开启的唯一条件就是:对数据库进行增,删,改的时候 -- 换句话说,对数据进行增删改以后,必须要执行提交或者回滚 -- 事务就是把数据库中的数据从一致状态转换为另一种一致状态 delete from teacher where id = 7;-- 现在把teacher给锁住了 -- 自动执行提交 commit; -- 自动回滚 rollback; update teacher set name='hehehehehehehe',age=30 where

JDBC连接Oracle数据库时出现的ORA-12505错误及解决办法

转载至http://www.blogjava.net/itspy/archive/2007/12/20/169072.html Oracle 问题描述:今天使用jdbc连接oracle 10.2.0.1.0 数据库的时候出现了下列错误: Connection refused(DESCRIPTION=(TMP=)(VSNNUM=153093120)(ERR=12505)(ERROR_STACK=(ERROR=(CODE=12505)(EMFI=4)))) 而直接通过plsql可以正常连接数据库,或

MySQL 读写分离 使用驱动com.mysql.jdbc.ReplicationDriver

说明文档:http://dev.mysql.com/doc/refman/5.1/en/connector-j-reference-replication-connection.html 代码例子: 1 import java.sql.Connection; 2 import java.sql.ResultSet; 3 import java.util.Properties; 4 5 import com.mysql.jdbc.ReplicationDriver; 6 7 public clas

Oracle的thin驱动和oci驱动有什么不同?哪个性能好些?

OCI:要安装ORACLE客户端,移植性略差,理论上性能好些 THIN:属于TYPE4,纯JAVA实现,移植性好,理论上性能略差些 推荐:最好还是使用THIN   DRIVER吧,移植性好些,使用起来也相对规范些,问题也少.至于性能嘛,说实话,在8i上没感觉THIN   DRIVER比OCI慢,感觉还快些.不过没有实际准确测试过,也不敢下定论.为什么呢,调用本地方法也是有开销的,JDK性能越来越好,本地方法的性能与调用的开销相抵一下就打了一点折扣.另外ORACLE   8i本身就是JAVA实现,