天天看點

阿裡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;
    }

}