许多数据库连接池库提供了测试其 SQL 连接是否空闲的功能。例如,JDBC 池库 c3p0有一个名为 preferredTestQuery
的属性,它按照配置的时间间隔在连接上执行。同样,Apache Commons DBCP 有 validationQuery
.
很多example queries我见过 MySQL 的,建议使用 SELECT 1; 作为测试查询的值。但是,此查询不适用于某些数据库(例如 HSQLDB,SELECT 1
需要 FROM
子句)。
是否存在与数据库无关的查询,其效率相当,但适用于所有 SQL 数据库?
编辑:
如果没有(似乎是这种情况),有人可以建议一组适用于各种数据库提供程序的 SQL 查询吗?我的目的是以编程方式确定我可以根据我的数据库提供程序配置使用的语句。
最佳答案
经过一些研究以及此处一些答案的帮助:
选择 1
- H2
- MySQL
- Microsoft SQL Server(根据 NimChimpsky)
- PostgreSQL
- SQLite
- hive
从 DUAL 中选择 1
- 甲骨文
从任何_现有_表中选择 1,其中 1=0
或
从 INFORMATION_SCHEMA.SYSTEM_USERS 中选择 1
或
立即调用()
HSQLDB(使用版本 1.8.0.10 进行测试)
注意:我尝试在第二个查询上使用
WHERE 1=0
子句,但它无法用作 Apache Commons DBCP 的validationQuery
的值,因为查询不返回任何行
VALUES 1
或 从 SYSIBM.SYSDUMMY1 中选择 1
- Apache Derby(来自 daiscog )
从 SYSIBM.SYSDUMMY1 选择 1
- DB2
从系统表中选择计数(*)
- Informix
关于sql - 高效的 SQL 测试查询或验证查询将适用于所有(或大多数)数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3668506/