通过 JDBC 对数据库进行 Ping 操作的最佳方式是什么?

2022-09-03 05:11:08

我正在尝试确定通过JDBC ping数据库的最佳方法。我说的“最佳”是指快速和低开销。例如,我考虑过执行以下命令:

"SELECT 1 FROM DUAL"

但我相信DUAL表是Oracle特定的,我需要一些更通用的东西。

请注意,它有一个方法,但javadoc声明这不能用于测试连接的有效性。ConnectionisClosed()


答案 1

在 JDBC 4 中,您可以从连接接口使用 (JavaDoc)。这基本上为您做了审判陈述。isValid(int)

一些驱动程序通过将正确的虚拟 SQL 发送到数据库来实现此目的,而一些驱动程序直接使用低级操作来减少分析开销。

但是,请注意超时,某些驱动程序(DB/400 和 Oracle Thin)确实会为每个调用生成一个新的时间线程,这对于大多数池验证方案来说并不可接受)。而且Oracle似乎也没有使用预准备语句,所以它有点依赖于隐式缓存。


答案 2

是的,这将是Oracle独有的,但是在JDBC中没有通用的方法可以做到这一点。

大多数连接池实现都有一个配置参数,您可以在其中指定将用于 ping 的 SQL,从而将弄清楚如何执行此操作的责任推给用户。

这似乎是最好的方法,除非有人为此想出一个小的帮助器工具(当然,它排除了使用可能更快的非基于SQL的方法,如Oracle的内部ping函数。)


推荐