2015-01-15 114 views
3

我已經有點偏離Java EE一段時間了,但我對所有這些東西有一個基本的想法。JTDS驅動程序 - 連接池與連接池

我讀了JTDS文檔瀏覽:

http://jtds.sourceforge.net/features.html

它說,它提供的語句池和連接池,但不提供一個連接池實現。

  1. 假設JTDS驅動程序本身提供連接池,那麼爲什麼我需要連接池(如DBCP)呢?
  2. 換句話說,就是通過JTDS提供連接 池之間和全面的連接池 實現(在此JTDS文檔頁面的意義上)在它上面 區別,?
  3. 另外,語句和連接池 (正如在這個JTDS文檔頁面中提到的)之間有什麼區別?

隨意更多詳細信息添加到您的答案
(不管你找到重要的,事情我沒有問關於明確)
因爲我這個很困惑。

+1

它看起來像「語句池」是一個錯字,應該是「語句緩存」,這是一個非常需要的功能:當應用程序觸發相同的查詢時,驅動程序將重新使用預準備語句進行連接「select * from userid where userid =?」)。這可以節省大量(IO /網絡)時間,像[HikariCP](https://github.com/brettwooldridge/HikariCP)這樣的連接池實現假定JDBC驅動程序具有此功能(HikariCP選擇不實施語句緩存功能)。 – vanOekel 2015-01-16 00:12:08

回答

5

據我可以從API文檔中知道,他們的意思是說,jTDS提供了一個javax.sql.PooledConnection和一個javax.sql.ConnectionPoolDataSource實現。這些類將被連接池(例如Java EE應用程序服務器)使用,而不是連接池本身。

ConnectionPoolDataSource創建PooledConnection對象,或換句話說,它是數據源的連接池。 PooledConnection是物理連接的句柄,並在連接池中保存。當用戶從池中請求連接時,連接池將PooledConnection從「可用」移動到「正在使用」列表中,並從PooledConnection獲得邏輯java.sql.Connection。這個邏輯連接是交給用戶的。

PooledConnection可以被連接池用來監視邏輯連接。例如,當調用close()時,將PooledConnection返回到'available',或者強制撤消邏輯連接並使其無效(例如,如果使用時間過長)。

因此,jTDS本身沒有連接池實現,但它支持連接池。不幸的是,JDBC規範中的措辭令人困惑。

我對a similar question有更詳細的回答。