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