ApacheのCommons DBCPに含まれるorg.apache.commons.dbcp.BasicDataSourceFactoryでは、validationQueryというのを指定できるが、ここで指定するクエリにはいくつかの条件がある。
- SELECTクエリであること
- 1つ以上の行を返すこと
- 1つ以上の列を返すこと
したがって、例えば、"SELECT COUNT(*) FROM xxx"みたいなクエリは条件を満たすが、コネクションの検証のためだけに重たくなるかもしれないクエリは投げたくない。
そこで、DB2、Oracle、PostgreSQL、MySQLについて、validationQueryに適していそうなクエリを作ってみた。
なお、括弧内は動作確認に使用したDBMSのバージョン。
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
select * from dual select 1 from dual select 'a' from dual select current_date from dual select current_timestamp from dual