读书人

通过jndi连接池,java对oracle的blob字

发布时间: 2011-11-14 22:03:59 作者: rapoo

通过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了,换其它数据源之后又的改代码.
有没有更通用一点的方法?

读书人网 >J2SE开发

热点推荐