86

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

質問: validationQuery にはどのような値を指定する必要がありますか?

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

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

4

4 に答える 4

219

すべてのデータベースに対して、validationQuery は 1 つだけではありません。データベースごとに、異なる 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
  • マリアDb -select 1
  • Informix -select 1 from systables
  • ハイブ-select 1
  • インパラ-select 1

これについては、さまざまなデータベースの検証クエリのブログに書きました。

事前に、JDBC ドライバーに応じて validationQuery を返すクラスの例を示します。

または、誰かがより良い解決策を持っていますか?

于 2012-05-21T11:21:40.963 に答える
15

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

/* ping */

詳細については、MySQL ドライバー マニュアルのValidating Connectionsを参照してください。

于 2013-12-26T09:10:47.427 に答える
4

Informix の場合、検証クエリは、systables から 1 を選択します。

于 2015-06-26T22:06:59.473 に答える