当前位置: 代码迷 >> J2SE >> 通过jndi连接池,java对oracle的blob字段取出时会发生"java.lang.ClassCastException"异常,有什么解决办法嘛
  详细解决方案

通过jndi连接池,java对oracle的blob字段取出时会发生"java.lang.ClassCastException"异常,有什么解决办法嘛

热度:169   发布时间:2016-04-24 12:45:28.0
通过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了,换其它数据源之后又的改代码.
有没有更通用一点的方法?
  相关解决方案