2012-05-21 30 views
67

私はDBCPプールを使用して、私は接続がまだ有効であるかどうかをテストするためにtestOnBorrowtestOnReturnを使用します。
残念ながら、それを機能させるためには、validationQueryプロパティを設定する必要があります。DBCP - validationQuery異なるデータベースの

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

私が知っていることは、validationQueryは少なくとも1つの行を返すSQL SELECT文でなければなりません。

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

+0

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

答えて

162

すべてのデータベースに対して1つのvalidationQueryだけではありません。各データベースでは、異なるvalidationQueryを使用する必要があります。私はこのテーブルを収集しているグーグルとテストの数時間後

: - select 1 from INFORMATION_SCHEMA.SYSTEM_USERS

  • オラクル -

    データベースvalidationQueryが

    • HSQLDBノートを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からvalidation query for various databases - 私は私のブログにそれについて書いたselect 1 from rdb$database

    - select 1

  • Firebirdの

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

    誰かより良い解決策がありますか?

  • +2

    また、 '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の(ビルド7601:サービスパック1)(ハイパーバイザ) – Yuci

    9

    Connector/Jドライバを使用するMySQLの場合、サーバーにpingを送信し軽度の結果セットを返す軽量の検証クエリがあります。 検証クエリは正確に以下の文字列を指定できます(またはで始まる必要があります):InformixのMySQLドライバのマニュアルにValidating Connections

    +0

    また、Microsoft SQL Server 2008 – Hannes

    0

    を参照してくださいインフォア、検証クエリーを選択し 、ある詳しくは

    /* ping */ 
    

    1 from systables

    関連する問題