我在使用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);
------解决方案--------------------