日期:2014-05-20  浏览次数:20695 次

通过jndi连接池,java对oracle的blob字段取出时会发生"java.lang.ClassCastException"错误,有什么解决方法嘛?
我在使用jdbc对oracle的blob地段插入时发生"java.lang.ClassCastException"
具体代码如下,先插入一个空的blob字段,然后对该字段更新.
该代码在使用jdbc:oracle:thin@ 方式取连接时就没问题,在用weblogic连接池就会出错
Java code
PreparedStatement pstmt = conn.prepareStatement("insert into test(id,content) values(?,empty_blob())"); 
     pstmt.setString(1,"1"); 
     pstmt.executeUpdate(); 
     pstmt.close(); 

     pstmt = conn.prepareStatement("select content from test where id= ? for update"); 
     pstmt.setString(1,"1"); 
     ResultSet rset = pstmt.executeQuery(); 
     if (rset.next())
         blob = (BLOB) rset.getBlob(1); //这一步会出错


 blob = (BLOB) rset.getBlob(1); //这一步报错,java.lang.ClassCastException: weblogic.jdbc.wrapper.Blob_oracle_sql_BLOB
google了一下,发现好像通过weblogic连接池取出的连接取出的blob对象是weblogic封装过的OracleThinBlob,而不是oracle.sql.BLOB,所以转换出错了.

如果一定要使用weblogic连接池,我的weblogic用的是8.14 .有什么解决方法没?
ps:最近oracle收购bea后,bea的论坛怎么上不了了.

------解决方案--------------------
将blob = (BLOB) rset.getBlob(1)改成
OracleThinBlob blob = (weblogic.jdbc.vendor.oracle.OracleThinBlob) rs.getBlob(1);

------解决方案--------------------
探讨
引用:
将blob = (BLOB) rset.getBlob(1)改成
OracleThinBlob blob = (weblogic.jdbc.vendor.oracle.OracleThinBlob) rs.getBlob(1);


这样是可以的,但是这样的话就依赖于weblogic了,换其它数据源之后又的改代码.
有没有更通用一点的方法?