繁体   English   中英

将java.sql.Connection转换为PGConnection

[英]Cast java.sql.Connection to PGConnection

我想使用Tomcat在PostgreSQL中上传文件:

@Resource(name = "jdbc/DefaultDB")
private DataSource ds;
Connection conn = ds.getConnection();

我试图通过这种方式转换conn对象:

PGConnection pgCon = ((org.apache.commons.dbcp.DelegatingConnection) conn).getInnermostDelegate();

我懂了

Caused by: java.lang.ClassCastException: org.apache.tomcat.dbcp.dbcp2.PoolingDataSource$PoolGuardConnectionWrapper cannot be cast to org.postgresql.PGConnection

我也尝试过:

Connection unwrap = conn.unwrap(Connection.class);
connSec = (org.postgresql.PGConnection) unwrap;

我懂了

java.sql.SQLException: Cannot unwrap to org.postgresql.PGConnection

LargeObjectManager pgCon = pgCon.getLargeObjectAPI();

实施代码的正确方法是什么?

聚苯乙烯

我尝试了这个:

PGConnection pgConnection = null;

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

LargeObjectManager lobj = pgConnection.getLargeObjectAPI();

但是我在这一行得到了NPE LargeObjectManager lobj = pgConnection.getLargeObjectAPI();

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

对我来说,这工作:

if (conn.isWrapperFor(org.apache.tomcat.dbcp.dbcp2.DelegatingConnection.class))
        org.postgresql.jdbc.PgConnection pgConnection=(org.postgresql.jdbc.PgConnection)((org.apache.tomcat.dbcp.dbcp2.DelegatingConnection)conn).getInnermostDelegateInternal();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM