DBCP2委托连接

时间:2018-08-31 06:48:08

标签: java jdbc

为什么需要委派连接或DBCP2中的innerMostDelegate进行数据库连接? 我看到了一些准备好的语句,并将Java对象创建为需要委托连接的oracle对象。但是我要达到目的,并且通过委派连接而不是普通连接可以完成哪些额外的工作。

1 个答案:

答案 0 :(得分:3)

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

连接池通常返回一个逻辑连接,该逻辑连接是到数据库的物理连接的包装(或代理)。通常,此逻辑连接仅公开JDBC API。如果您确实需要访问那些特定于驱动程序的功能,则需要“拆开”逻辑连接。鉴于这很容易导致连接泄漏或对连接的早期关闭进行不正确的处理,因此在执行此操作时需要小心,并确保关闭原始获取的连接,而不是解开的连接之一

对于DBCP,连接可能被多次包装。 getInnerMostDelegate()方法将递归解包,直到到达不是DelegatingConnection实例的连接为止。这很可能是物理连接。

所以

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