2012-05-21 61 views
67

我使用DBCP池,我想用testOnBorrowtestOnReturn來測試連接是否仍然有效。
不幸的是我必須設置屬性validationQuery來使它工作。DBCP - validationQuery對於不同的數據庫

問題:validationQuery應該有什麼價值?

我知道,validationQuery必須是一個SQL SELECT語句,它返回至少一行。

問題是我們使用各種數據庫(DB2,Oracle,hsqldb)。

+0

使用validationQuery不會降低性能嗎?此查詢針對應用程序正確的每個連接運行? – yaswanth

回答

162

所有數據庫不僅有一個validationQuery。在每個數據庫上,你必須使用不同的validationQuery。

谷歌搜索和測試我收集這個表的幾個小時後:

數據庫validationQuery指出

  • HSQLDB - select 1 from INFORMATION_SCHEMA.SYSTEM_USERS
  • 甲骨文 - select 1 from dual
  • DB2 - select 1 from sysibm.sysdummy1
  • 的MySQL - select 1
  • 的Microsoft SQL Server - select 1(SQL-Server 9.0中,所測試10.5【2008】)
  • 的PostgreSQL - select 1
  • 的Ingres - select 1
  • 德比 - values 1
  • H2 - select 1
  • 火鳥 - select 1 from rdb$database

我寫了關於它在我的博客 - validation query for various databases

事先有一個類的例子,它根據JDBC驅動程序返回validationQuery。

還是有人有更好的解決方案?

+2

+1,'select 1'在MySQL上工作(編輯你的答案) –

+4

select 1在postgresql上也有效 –

+0

'select 1'也適用於Microsoft SQL Server 2014 - 12.0.2000.8(X64),2014年2月20日20: 04:26,Windows NT 6.1上的標準版(64位)(內部版本7601:Service Pack 1)(管理程序) – Yuci

9

對於帶有Connector/J驅動程序的MySQL,有一個輕量級驗證查詢,它只是向服務器發送一個ping並返回一個虛擬結果集。 驗證查詢可以是(或應開始)恰好以下字符串:

/* ping */ 

有關詳細的Infor參考Validating Connections在MySQL驅動程序手冊

+0

同時適用於Microsoft SQL Server 2008 – Hannes

0

對於Informix,驗證查詢是, 選擇1 from systables