JDBC:Connection 类型转换报错,导致连接池不可用

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.

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值