关于DruidPooledConnection cast to org.postgresql.core.BaseConnection

jeromePeng 发布于 2014/07/14 15:29
阅读 1K+
收藏 0

@wenshao 你好,想跟你请教个问题:

温少您好,我使用druid连接postgresql数据库使用CopyManager 遇到一个问题 org.postgresql.copy.CopyManager copyManager = new CopyManager((BaseConnection)conn));  
这里转化的时候就有问题了 java.lang.ClassCastException: com.alibaba.druid.pool.DruidPooledConnection cannot be cast to org.postgresql.core.BaseConnection

conn是通过javax.sql.DataSource.getConnection()获得


spring里datasource配置

<bean id="dataSourceAfc" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close"> 
  <property name="url" value="${afc.url}" />
    <property name="username" value="${afc.username}" />
    <property name="password" value="${afc.password}" />
   <property name="proxyFilters">
       <list>
           <ref bean="stat-filter" />
       </list>
   </property>
  <property name="filters" value="log4j,stat" />  <!--stat监控统计功能 -->
   <property name="maxActive" value="4" />
   <property name="initialSize" value="2" />
   <property name="maxWait" value="60000" />
   <property name="minIdle" value="1" />
   <property name="timeBetweenEvictionRunsMillis" value="3000" />
   <property name="timeBetweenLogStatsMillis" value="30000" />
   <property name="minEvictableIdleTimeMillis" value="300000" />
   <property name="validationQuery" value="SELECT 'x' FROM DUAL" />
   <property name="testWhileIdle" value="true" />
   <property name="testOnBorrow" value="false" />
   <property name="testOnReturn" value="false" />
   <property name="poolPreparedStatements" value="true" /> 
   <property name="maxPoolPreparedStatementPerConnectionSize" value="20" />
    </bean>

druid version 1.0.7

以下是问题补充:

@jeromePeng: @Test public void copyTo() throws Exception { Class.forName("org.postgresql.Driver"); Connection con = DriverManager.getConnection("jdbc:postgresql://192.168.20.188:5445/edb","mpptt_dss","dss"); CopyManager copyManager = new CopyManager((BaseConnection) con); OutputStream to = new FileOutputStream("ccfr_group.ds"); long num = copyManager.copyOut("COPY ccfr_group TO STDOUT delimiter '|'", to); //long num = copyManager.copyOut("COPY (select * from dss.dscmd_send) TO STDOUT delimiter '|'", to); to.close(); con.close(); System.out.println("Done. num=" + num); } 单独运行这个方法,就是不使用连接池也是正常的 (2014/07/14 16:40)
加载中
0
石头哥哥
石头哥哥
把org.postgresql.Driver ,driverclass加上
0
库特
库特
你这问题解决没,是因为驱动的问题吗?我的驱动有啊
0
库特
库特

终于解决了,在强制转换的时候,首先你拿到的是你的connection,不能直接转换这个,得用这个,connection.getMetaData().getConnection(),然后即:

BaseConnection baseConn = (BaseConnection) connection.getMetaData().getConnection();

返回顶部
顶部