【问题标题】:how to cast dbcp connection to oracle connection?如何将 dbcp 连接转换为 oracle 连接?
【发布时间】:2015-09-26 12:00:01
【问题描述】:

我需要在运行时将 PoolableConnection 转换为 OracleConnection,但我不知道该怎么做。 因为我得到了 classCastException,如果所有类都扩展了 Connection,我可以这样做吗?

【问题讨论】:

  • 为什么需要使用OracleConnection?过去,这是为了有效地使用 BLOB 所必需的,但现在已经不是这样了。需要演员阵容的用例是什么?

标签: java oracle tomcat jdbc


【解决方案1】:

您应该能够强制转换为特定于 DBCP 的 Connection 类并从那里检索内部 Oracle 连接:

import org.apache.commons.dbcp.DelegatingConnection;

DelegatingConnection dc = (DelegatingConnection)conn;
OracleConnection oc = (OracleConnection)pc.getInnermostDelegate();

如果您使用的是 Tomcat 的内置 DBCP 副本,那么您需要的导入是:

import org.apache.tomcat.dbcp.dbcp.DelegatingConnection;

或者您可以使用内置于 Oracle JDBC 驱动程序实现中的连接池。这将返回一个 Oracle 连接。一个简单的设置是:

<Resource auth="Container"
          connectionCacheName="CXCACHE"
          connectionCacheProperties="{MaxStatementsLimit=5,MinLimit=1, MaxLimit=1, ValidateConnection=true}"
          connectionCachingEnabled="true"
          description="Oracle Datasource"
          factory="oracle.jdbc.pool.OracleDataSourceFactory"
          name="jdbc/TestDB"
          user="default_user" 
          password="password"
          type="oracle.jdbc.pool.OracleDataSource"
          url="jdbc:oracle:thin:@//localhost:1521/orcl"
          />

【讨论】:

    【解决方案2】:

    只有当你要转换的对象实际上是你要转换到的类的一个实例时,你才能转换。如果您收到的是ClassCastException,情况并非如此。

    所有扩展 Connection 的类都可以转换为 Connection,但不一定相互转换。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-22
      • 2019-03-03
      • 2015-11-06
      • 2017-04-08
      • 1970-01-01
      相关资源
      最近更新 更多