HHeLiBeXの日記 正道編

日々の記憶の記録とメモ‥

BasicDataSourceFactoryのvalidationQueryに指定するのに適していそうなクエリ

ApacheのCommons DBCPに含まれるorg.apache.commons.dbcp.BasicDataSourceFactoryでは、validationQueryというのを指定できるが、ここで指定するクエリにはいくつかの条件がある。

  • SELECTクエリであること
  • 1つ以上の行を返すこと
  • 1つ以上の列を返すこと

したがって、例えば、"SELECT COUNT(*) FROM xxx"みたいなクエリは条件を満たすが、コネクションの検証のためだけに重たくなるかもしれないクエリは投げたくない。
そこで、DB2OraclePostgreSQLMySQLについて、validationQueryに適していそうなクエリを作ってみた。
なお、括弧内は動作確認に使用したDBMSのバージョン。

DB2 (v9.1, v9.5)*1

SELECT * FROM TABLE(VALUES(1)) AS T
SELECT * FROM TABLE(VALUES('a')) AS T
SELECT * FROM TABLE(VALUES(CURRENT_SCHEMA)) AS T
SELECT * FROM TABLE(VALUES(CURRENT_SERVER)) AS T
SELECT * FROM TABLE(VALUES(CURRENT_USER)) AS T
SELECT * FROM TABLE(VALUES(CURRENT_DATE)) AS T
SELECT * FROM TABLE(VALUES(CURRENT_TIME)) AS T
SELECT * FROM TABLE(VALUES(CURRENT_TIMESTAMP)) AS T

PostgreSQL (v8.3)

select 1
select 'a'
select current_user
select current_date
select current_time
select current_timestamp

MySQL (v5.0)

select 1
select 'a'
select current_user
select current_date
select current_time
select current_timestamp

Oracle Database (10g XE)*2

select * from dual
select 1 from dual
select 'a' from dual
select current_date from dual
select current_timestamp from dual

*1:パターンとしては、「SELECT * FROM」の代わりに「SELECT 1 FROM」や「SELECT 'a' FROM」もあり。

*2:いただいたコメントを元に修正。