weblogic连接池 JNDI提供的链接保存 Oracle数组 报错 oracle.jdbc.driver.T4CConnection cannot be cast to oracle.jdbc.OracleConnection
oracle.jdbc.driver.T4CConnection cannot be cast to oracle.jdbc.OracleConnection
大家好,我在用weblogic连接池 JNDI 提供的,连接保存,oracle自定数组 报错,麻烦问问,怎么搞咯?谢谢哈
ArrayList array;
ARRAY adArray = getExpInfoArray(con,"EXP_INFO_TYPE_ARR", array);
参数解释:
(1)
EXP_INFO_TYPE_ARR 是Oracle数据库中定义的数组类型的名称
(2)
array是java类型的对象集合对象,就可以在调用存储过程时作为数组参数传入。
需注意的是,connection必须是Native Connection,如果connection是通过JDBC建立数据库连接并获取的,就不会有问题,
但是如果是通过JNDI数据源获取的,就不行,因为从数据源获取的Connection是Native Connection的代理类,
比如Tomcat中通过配置的JNDI数据源获取连接,连接类型是org.apache.commons.dbcp.PoolableConnection类型的;
在WebLogic、JBoss等其他服务器中,得到的Connection类型又是不同的
报错信息如下:
oracle.jdbc.driver.T4CConnection cannot be cast to oracle.jdbc.OracleConnection
上网搜索的到2个解决办法如下:
(1)删除WEB-INF/lib目录下的Oracle数据库驱动
http://raise.diandian.com/java/the-method-for-passing-arrays-para-to-oracle.html
方法(1)给出的解决方式:部署环境下,删除WEB-INF/lib目录下的Oracle数据库驱动!---
按照这样删除的话,上面的代码岂不是编译报错?
(2)从数据源获取物理连接
http://middleware123.com/weblogic/docs100/jdbc/thirdparty.html
Connection conn = null; try { ctx = new InitialContext(ht);
// 在 JNDI 树上查找数据源并请求 // 连接。
javax.sql.DataSource ds = (javax.sql.DataSource) ctx.lookup ("myDataSource");
// 总是在 try 块中获取缓冲池连接, // 在这里,完全使用缓冲池连接,
// 并且必要时,在 finally 块中关闭缓冲池连接。 conn = ds.getConnection();
// 现在可以将 conn 对象转换为 WLConnection // 接口,然后获取底层物理连接。
java.sql.Connection vendorConn = ((WLConnection)conn).getVendorConnection();
// 不关闭 vendorConn // 也可以将 vendorConn 对象转换为供应商
// 接口,例如: // oracle.jdbc.OracleConnection vendorConn = (OracleConnection)
// ((WLConnection)conn).getVendorConnection()
试过了以上方法,还是不行,还是报错:
oracle.jdbc.driver.T4CConnection cannot be cast to oracle.jdbc.OracleConnection
---真诚感谢,有心回复教导的人,虽然我没钱钱,,工资也很底...