只在vc 下面搞过,不太一样。
解决方案 »
- 我安装了oracle 9i怎么没有SQL*Net Easy Configuration组件
- 求高人指点此段代码什么含义
- as4安装oracle10G依赖
- 非常简单的语句,如何查询相应字段并按字段排序。。。。
- 请教一个在win2003域控制器上安装oracle10g的问题
- odbc 访问oracle 存储过程返回游标???
- 怎样让折行文本变成一行记录?
- 出错:ORA-20000: ORU-10028: line length overflow, limit of 255 bytes per line?
- fetch out of sequences?
- 请问这条sql可以怎样优化,效率更高?
- 求一sql 语句:要把表中某字段改成唯一属性
- 关于exists 和in 的效率比较
[说明:这篇文章四天前已经在chinajavaworld,cn-java论坛上发表过,当时因为好像javaren上不去,只好仍到其他地方了。这几天又不再北京,没有上网,今天才得以发出来] 现在才发觉,原来 getBLOB is not supported by the Weblogic JDBC Drivers 。这几天在操纵oracle的CLOB字段时候,使用连接池所报的错误。 使用直接连接的情况下,oracle.jdbc.OracleResultSet ors = (oracle.jdbc.OracleResultSet)rs 是可以正常转换的。
在使用连接池,数据库连接池的数据库驱动采用Oracle thin driver (oracle.jdbc.driver.OracleDriver)用实际上连接池内部是涉及到weblogic jdbc driver的)。这个时候,就会报:
java.io.Exception :weblogic.jdbc.rmi.SerialResultSet
java.lang.ClassCastException: weblogic.jdbc.rmi.SerialResultSet
如果再细化追踪错误,会报出
SQLException :getBLOB is not supported by the Weblogic JDBC Drivers
java.sql.SQLException: getBLOB is not supported by the Weblogic JDBC Drivers
at weblogic.jdbc.vendor.oracle.OracleUtils.createUnsupportedException(OracleUtils.java:40)
at weblogic.jdbc.rmi.SerialResultSet.getBLOB(SerialResultSet.java:1603) 这样,在操纵oracle的BLOB/CLOB类型数据的时候(主要是添加和更新,如果仅仅是读取,那么只需要一般的java.sql.Statement和java.sql.ResultSet.getBlob()就可以读取),就需要使用weblogic.jdbc.vendor.oracle.OracleThinBlob和weblogic.jdbc.vendor.oracle.OracleThinClob类。
例如下面的一段代码,未使用weblogic连接池情况下,是可以这样操作的(往oracle数据中增加一条BLOB类型数据)
// stmt是java.sql.Statement对象
// tmpbyte是byte数组
// 代码仅供参考
String sqlstr = "select blob_code form testtable where blob_key=1 for update ";
oracle.sql.OracleResultSet ors = (oracle.sql.OracleResultSet)stmt.executeQuery(sqlstr);
oracle.sql.BLOB blob = RS_forms.getBLOB("blob_code");
OutputStream os = blob.getBinaryOutputStream();
os.write(tmpbyte);
os.close();
stmt.close();但是如果,将这段程序移植到使用weblogic连接池获取connection对象中,就会报错:java.lang.ClassCastException: weblogic.jdbc.rmi.SerialResultSet。出错的地方就是在
(oracle.sql.OracleResultSet)stmt.executeQuery(sqlstr)这段代码。
所以,以上代码,需要改成如下(部分省略),可能够适用连接池的情况: String sqlstr = "select blob_code form testtable where blob_key=1 for update ";
java.sql.ResultSet rs = stmt.executeQuery(sqlstr);
java.sql.Blob blob = rs.getBlob("blob_code");
OutputStream os = ((weblogic.jdbc.vendor.oracle.OracleThinBlob)blob).getBinaryOutputStream();
os.write(tmpbyte);
os.close();
rs.close();
stmt.close();
============================>>>>>
/**
* Author : zhaobing , 银狐999
* Date : 2002月8月9日
* 说明:此问题的最初发现和解决者,是 zhaobing ,特此感谢。
* 如有什么疑问,请留言,或发邮件:[email protected]
*/
原来两年前就有人解决了,谢谢这位菜农兄,也谢谢楼上的兄弟关注!
谢谢!