java - DBCP2 委托(delegate)连接

标签 java jdbc

为什么我们需要委托(delegate)连接或DBCP2中的innerMostDelegate来进行数据库连接? 我看到一些准备好的语句并将 java 对象创建为我们需要委托(delegate)连接的 oracle 对象。但我想知道委托(delegate)连接而不是普通连接的目的以及额外的工作。

最佳答案

您通常不会“需要”它,除非您需要访问 JDBC API 中未定义但仅在特定于驱动程序的 API 中可用的功能。

连接池通常返回一个逻辑连接,它是数据库物理连接的包装器(或代理)。此逻辑连接通常仅公开 JDBC API。如果您确实需要访问这些特定于驱动程序的功能,则需要“解开”逻辑连接。鉴于这很容易导致连接泄漏或错误处理提前关闭连接,因此执行此操作时需要小心,并确保关闭最初获得的连接,而不是未包装的连接之一

在 DBCP 的情况下,连接似乎可能被多次包装。 getInnerMostDelegate() 方法将递归展开,直到到达不是 DelegatingConnection 实例的连接。这很可能是物理连接。

所以

  1. 如果您可以使用 JDBC API 执行某些操作,则通常不需要此操作。
  2. 仅当您确实需要访问特定于驱动程序的 API 时才使用此选项。
  3. 如果您使用此功能,请确保关闭正确的连接。

关于java - DBCP2 委托(delegate)连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52109941/

相关文章:

java - 将所有 JSON 值转换为字符串

java - 为什么小程序在调整到我指定的大小之前会以默认大小启动?

java - CData JDBC 驱动程序 | java.lang.Exception : Could not find web browser

java - Spring TransactionManager - 提交不起作用

java - 从 Spring JdbcTemplate 的 queryForObject 方法返回泛型类型

java - Thread start() 和 Runnable run() 有什么区别

java - 如何设置 JFace ListViewer 大小?

java - JLabels setPreferredSize 更改所有 JLabel 的大小,而不仅仅是一个?

java - 设置 Java 数据库

java - Netezza 流式处理结果集