创建Blob时出现运行时异常

时间:2015-09-02 22:35:09

标签: java oracle

尝试使用BLOB.createTemporary(connection, false, BLOB.DURATION_SESSION)创建BLOB对象,但是获取Class Cast Exception

  

java.lang.ClassCastException:   org.apache.commons.dbcp.cpdsadapter.ConnectionImpl无法强制转换为   oracle.jdbc.OracleConnection。

我尝试了以下建议,但仍然出现同样的错误。Apache Commons DBCP connection object problem, Thread: ClassCastException in org.apache.tomcat.dbcp.dbcp.PoolingDataSource$PoolGuardConnectionWrapper

有人建议我解决这个问题。

1 个答案:

答案 0 :(得分:1)

Oracle BLOB.createTemporary()方法期望Connection参数是oracle.jdbc.OracleConnection对象,但来自Tomcat的连接由DBCP管理,因此connection包含在DBCP中class(org.apache.tomcat.dbcp.dbcp.PoolingDataSource$PoolGuardConnectionWrapper)。

您需要解包它以获取真正的Oracle连接对象,或者停止使用Oracle BLOB

只需使用JDBC方法:Blob blob = connection.createBlob()

<强>更新

JDBC Blob是一个接口。 JDK中没有实现类,因此您始终可以获得特定于DBMS的实现。如果需要,您可以强制转换为OracleBlob,这也是一个接口,提供其他特定于Oracle的方法。

OracleBlob的有趣javadoc:

  

通常,任何新代码都应避免直接使用类BLOB。对于变量声明,请根据需要使用接口Blob或此接口。请使用BLOB.createTemporary(java.sql.Connection, boolean, int)BLOB.empty_lob(),而不是静态方法Connection.createBlob()BLOB.getEmptyBLOB()

相关问题