许多数据库连接池库提供了测试其SQL连接是否空闲的能力.例如,JDBC池库c3p0有一个名为preferredTestQuery的属性,该属性以配置的间隔在连接上执行.类似地,Apache Commons DBCP也有validationQuery个.

我看到的很多examplequeries都是针对MySQL的,建议使用SELECT 1;作为测试查询的值.但是,该查询在某些数据库上不起作用(例如,HSQLDB,SELECT 1需要FROM子句).

是否有一种与数据库无关的查询,其效率相当,但适用于所有SQL数据库?

Edit:

如果没有(似乎是这样),有人能推荐一组适用于各种数据库提供者的SQL查询吗?我的目的是根据数据库提供程序配置,以编程方式确定可以使用的语句.

推荐答案

jOOQ manual's section about the DUAL table为jOOQ的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"

Sql相关问答推荐

SQL计数所有值在联接范围内的行

如何使用PostGIS从单个表中 Select 所有相交面组

如何在Snowflake SQL存储过程中传递LIMIT和OFFSET的参数?

有没有办法用SQL编写一条CASE语句,如果列A&>0,那么列B,列C=0

Oracle SQL根据列中的条件 Select 最大记录数

Django将字符串筛选为整数?

雅典娜嵌套Json提取液

如何使用SQL Server中的Nodes()方法执行与OPENXML相同的操作

Redshift PL/pgSQL循环中的参数化列名

如何设计一个调用嵌套函数并仅在所有被调用的嵌套函数都提交时才提交的事务,例如,如果一个子函数失败则中止?

Oracle中的时间戳

Oracle 23c ROUND,数据类型为DATE

ColdFusion+Docker:未安装SQLSERVER包

使用CTE在SNOWFLAKE中创建临时表

MySQL中的递归查询邻接表深度优先?

具有多个表 JOINS 的 STRING_AGG 的替代方法 (SQL Server 2016)

使用给定的变量对在循环中执行更新语句

插入行时的行安全策略问题

Select 多年的日期范围

SQL/Postgres:按日期和其他属性对相关性能进行分组