Java 如何将Jdbc4Connection强制转换为PGConnection?

Java 如何将Jdbc4Connection强制转换为PGConnection?,java,spring,postgresql,spring-boot,Java,Spring,Postgresql,Spring Boot,我想利用postgresCopyManager像: CopyManager cp = ((PGConnection) dataSource.getConnection()).getCopyAPI(); 当我使用spring boot时,数据源是一个org.apache.tomcat.jdbc.pool.datasource,因此连接是一个Jdbc4Connection 问题:强制转换引发以下错误: java.lang.ClassCastException: com.sun.proxy.$Pro

我想利用postgres
CopyManager
像:

CopyManager cp = ((PGConnection) dataSource.getConnection()).getCopyAPI();
当我使用
spring boot
时,数据源是一个
org.apache.tomcat.jdbc.pool.datasource
,因此连接是一个
Jdbc4Connection

问题:强制转换引发以下错误:

java.lang.ClassCastException: com.sun.proxy.$Proxy55 cannot be cast to org.postgresql.PGConnection
另外,当我尝试强制转换到JDBC4连接时,我得到了完全相同的错误

java.lang.ClassCastException: com.sun.proxy.$Proxy55 cannot be cast to org.postgresql.jdbc4.Jdbc4Connection

我能做什么?

如果您使用的是javax.sql.DataSource,那么这里有一个解决方案:

if (dataSource.getConnection().isWrapperFor(PGConnection.class)) {
  PGConnection pgConnection = dataSource.getConnection().unwrap(PGConnection.class);
}

希望这能有所帮助。

那么您拥有的不是PGConnection。数据源并没有提供真正的连接,只有一个代理。检查连接中是否有方法
getPhysicalConnection()
或类似的内容pool@Thorbjørnravandersen是的,但我在强制转换到不同的连接时会遇到相同的错误。这是因为您拥有的是jdbc池提供的代理,而不是实际的连接。如果有疑问,请阅读手册: