阿里Druid连接池的坑。。
Druid的坑
当查询数据库的Clob转换为Oracle Clob类型的时候。
java.lang.ClassCastException: com.alibaba.druid.proxy.jdbc.ClobProxyImpl cannot be cast to oracle.sql.CLOB
问题原因
ClobProxyImpl不能转换为Oracle的Clob字段,这也是醉了。
原因是Druid为Clob字段增加了代理类:com.alibaba.druid.proxy.jdbc.ClobProxyImpl,然后代码里面强制转换成Oracle的Clob就出现了这个问题。
解决方案
现在的解决方案是先转换为Druid的代理类ClobProxy对象,然后获取原生的Oracle Clob字段内容即可。
public class ClobUtil {
public static CLOB parseOracleClob(Clob clob) {
SerializableClob sclob = (SerializableClob) clob;
Clob wrappedClob = sclob.getWrappedClob();
// 解决Druid的坑
if (wrappedClob instanceof ClobProxy) {
ClobProxy clobProxy = (ClobProxy) wrappedClob;
wrappedClob = clobProxy.getRawClob();
}
return (CLOB) wrappedClob;
}
}
推荐阅读
分享Java干货,高并发编程,热门技术教程,微服务及分布式技术,架构设计,区块链技术,人工智能,大数据,Java面试题,以及前沿热门资讯等。
关注微信公众号福利!!!
回复关键字「666」获取一份最新 Java 架构资料,你要的都有!
回复关键字「Java」获取JVM, 多线程等Java技术系列教程;
回复关键字「spring」获取Spring, Spring Boot, Spring Cloud教程;
回复关键字「架构」获取分布式、微服务、架构、高并发等系列干货;
回复关键字「面试」获取各种 Java 面试题及答案、面试实战经验;