为什么我们需要委托(delegate)连接或DBCP2中的innerMostDelegate来进行数据库连接? 我看到一些准备好的语句并将 java 对象创建为我们需要委托(delegate)连接的 oracle 对象。但我想知道委托(delegate)连接而不是普通连接的目的以及额外的工作。
最佳答案
您通常不会“需要”它,除非您需要访问 JDBC API 中未定义但仅在特定于驱动程序的 API 中可用的功能。
连接池通常返回一个逻辑连接,它是数据库物理连接的包装器(或代理)。此逻辑连接通常仅公开 JDBC API。如果您确实需要访问这些特定于驱动程序的功能,则需要“解开”逻辑连接。鉴于这很容易导致连接泄漏或错误处理提前关闭连接,因此执行此操作时需要小心,并确保关闭最初获得的连接,而不是未包装的连接之一
在 DBCP 的情况下,连接似乎可能被多次包装。 getInnerMostDelegate()
方法将递归展开,直到到达不是 DelegatingConnection
实例的连接。这很可能是物理连接。
所以
- 如果您可以使用 JDBC API 执行某些操作,则通常不需要此操作。
- 仅当您确实需要访问特定于驱动程序的 API 时才使用此选项。
- 如果您使用此功能,请确保关闭正确的连接。
关于java - DBCP2 委托(delegate)连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52109941/