1. 程式人生 > >Druid連線池的坑

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

}