java - 从 jdbc-pool 到 SQL Server 2008 中特定表的最快验证查询是什么

标签 java sql-server-2008 validation connection-pooling

我通常使用 SELECT 1 作为来自 tomcat jdbc 池的首选验证查询,因为它只返回一行,结果 1 非常快,但今天我发现了一个可怕的错误:

我的数据库只有一个表及其主键并且不可为空。该表有时会被删除,然后根据应用情况再次出现。这就是问题所在,SELECT 1 验证与数据库的连接,因为它已经启动但表丢失,所以我得到一个可怕的异常。

因此,解决方案通过针对数据库中存在的唯一表查找一个验证查询来通过。而且,我需要查询尽可能快,因为应用程序的性能是主要目标之一。

您可以回答一个明显的查询可能是 SELECT 1 FROM THE_TABLE,但此查询为表中的每一行返回 1,这不是很快。

那么,对该表进行更快的验证查询是什么?

编辑

如果我需要返回至少一个结果应该如何验证查询?
我问这个是因为一些池实现,比如 commons-dbcp 不接受没有结果的查询作为经过验证的查询。

最佳答案

这个怎么样,它应该通过提取 0 行而不是实际列来验证表是否存在而不实际加载任何数据。

SELECT TOP 0 1 FROM THE_TABLE

演示:http://www.sqlfiddle.com/#!3/c670b/3


在 SQL SERVER 中也有内置的方法来检查对象是否存在。下面是两个有效地完成同一件事的示例。

select count(1) from information_schema.tables where table_name = 'THE_TABLE'
select OBJECT_ID('THE_TABLE') is not null

关于java - 从 jdbc-pool 到 SQL Server 2008 中特定表的最快验证查询是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10708274/

相关文章:

django - 如何使用 django-mssql 连接到 SQL Server 2008 R2?

ruby - Rails 应用程序的出生日期正则表达式 yyyy-mm-dd

java - Apache Wicket 中一个类的多个路径

java - 将字节转换为枚举

sql - SQL Server如何获取一个巨大字段的内容?

javascript - Bootstrap 模态验证

c# - CQRS 架构中的域验证

c# - .jar 和 .dll 文件之间的区别

java - 处理来自串行端口数组列表的数据

sql - 获取一组最近的记录