DBCP-さまざまなデータベースのvalidationQuery


83

DBCPプールを使用しておりtestOnBorrowtestOnReturnを使用して、接続がまだ有効かどうかをテストしたいと思います。
残念ながら、プロパティvalidationQueryを設定して機能させる必要があります。

質問:validationQueryにはどのような値が必要ですか?

私は知っています:validationQueryは少なくとも1つの行を返すSQLSELECTステートメントでなければなりません。

問題は、さまざまなデータベース(DB2、Oracle、hsqldb)を使用していることです。


validateQueryを使用してもパフォーマンスは低下しませんか?このクエリは、アプリケーションが正しく接続するたびに実行されますか?
yaswanth 2017年

回答:


206

すべてのデータベースに対してvalidationQueryが1つだけではありません。データベースごとに、異なる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
  • イングレス-select 1
  • ダービー-values 1
  • H2 -select 1
  • ファイアバード-select 1 from rdb$database

私は自分のブログにそれについて書きました-さまざまなデータベースの検証クエリ

事前に、JDBCドライバーに従ってvalidationQueryを返すクラスの例があります。

それとも誰かがより良い解決策を持っていますか?


4
select 1はpostgresqlでも有効です
Danubian Sailor

select 1Microsoft SQL Server 2014でも動作します-12.0.2000.8(X64)、2014年2月20日20:04:26、Windows NT 6.1 <X64>上のStandardEdition(64ビット)(ビルド7601:Service Pack 1)(ハイパーバイザー)
Yuci 2017年

select 1HiveとImpalaの場合
davidemm 2018年

14

Connector / Jドライバーを使用するMySQLの場合、サーバーにpingを送信し、ダミーの結果セットを返す軽量の検証クエリがあります。検証クエリは、次の文字列にすることができます(または最初から始める必要があります)。

/* ping */

詳細については、MySQLドライバーマニュアルの「接続検証」を参照してください。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.