许多数据库连接池库提供了测试其 SQL 连接是否空闲的能力。例如,JDBC 池库c3p0有一个名为 的属性preferredTestQuery,它会以配置的时间间隔在连接上执行。同样,Apache Commons DBCP 具有validationQuery.
preferredTestQuery
validationQuery
我见过的许多示例 查询SELECT 1;都是针对 MySQL 的,建议使用它作为测试查询的值。但是,此查询不适用于某些数据库(例如 HSQLDB,它SELECT 1需要一个FROM子句)。
SELECT 1;
SELECT 1
FROM
是否有一个与数据库无关的查询同样有效但适用于所有 SQL 数据库?
编辑:
如果没有(似乎是这种情况),有人可以建议一组适用于各种数据库提供商的 SQL 查询吗?我的意图是根据我的数据库提供程序配置以编程方式确定我可以使用的语句。
jOOQ 手册中关于该DUAL表的部分列出了 jOOQselect(inline(1))查询的以下内容:
DUAL
select(inline(1))
-- Access SELECT 1 FROM (SELECT count(*) dual FROM MSysResources) AS dual -- BigQuery, CockroachDB, Exasol, H2, Ignite, MariaDB, MySQL, PostgreSQL, -- Redshift, Snowflake, SQLite, SQL Server, Sybase ASE, Vertica SELECT 1 -- MemSQL, Oracle SELECT 1 FROM DUAL -- CUBRID SELECT 1 FROM db_root -- Db2 SELECT 1 FROM SYSIBM.DUAL -- Derby SELECT 1 FROM SYSIBM.SYSDUMMY1 -- Firebird SELECT 1 FROM RDB$DATABASE -- HANA, Sybase SQL Anywhere SELECT 1 FROM SYS.DUMMY -- HSQLDB SELECT 1 FROM (VALUES(1)) AS dual(dual) -- Informix SELECT 1 FROM (SELECT 1 AS dual FROM systables WHERE (tabid = 1)) AS dual -- Ingres, Teradata SELECT 1 FROM (SELECT 1 AS "dual") AS "dual"