Connection 类型转换报错如org.apache.tomcat.dbcp.dbcp2.PoolingDataSource$PoolGuardConnectionWrapper cannot be cast to oracle.jdbc.OracleConnection
JDBC:Connection 类型转换报错,导致连接池不可用
在使用Gauss数据库的时由于要使用GAUSS的BaseConnetion 去调用 CopyManager ,运行时出现了类型转换报错
(上面的报错是oracle的,Gauss的懒得再粘贴一份了)
Connection 类型转换报错,导致连接池不可用,被迫使用DriverManager,新建连接
conn = DriverManager.getConnection(newDds.getUrl(), newDds.getUsername(), newDds.getPassword());
Connect con = dateSource.getConnection();
BaseConnetion basCon = (BasConnection) con;// 出现类型转换报错问题
这是由于Connection是一个包装的dbcp连接,如果要调用PG、Gauss、Oracle等数据库自己的连接需要使用JDBC的BasicDataSource.unwrap(Classiface)打开它,或者可以提前使用BasicDataSource.isWrapperFor(Class<?>iface)来检查包装的连接是否为对应的数据库连接类型,以避免强制转换异常:
//是否是orcale连接
if (ds.getConnection().isWrapperFor(OracleConnection.class)) {
this.con = ds.getConnection().unwrap(OracleConnection.class);
}
//是否是PG连接 Gauss换成BaseConnection
if (ds.getConnection().isWrapperFor(PGConnection.class)) {
this.con = ds.getConnection().unwrap(PGConnection.class);
}
附上unwrap、isWrapperFor使用说明
链接: link.