尝试使用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
有人建议我解决这个问题。
答案 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()
。