java - JDBC QueryTimeout 仅适用于某些供应商

标签 java mysql sql-server oracle jdbc

我正在尝试使用 JDBC 向我的系统添加查询超时。我正在使用 statement.setQueryTimeout 函数来执行此操作。我知道这个值是在我使用 connection.createStatement、prepareStatement 等创建的语句上设置的,因为我已经使用 statement.getQueryTimeout 检查过它。但是,当使用不同的数据库(mysql、mssql、oracle 和 db2)进行测试时,只有 mysql 正常运行,而所有其他数据库实际上都没有超时

知道是什么原因造成的吗?我不确定为什么事情会在高级别上对一种设置起作用,但对其他设置不起作用,因为我使用的是标准提供的驱动程序

最佳答案

很可能那些驱动程序还没有实现它(还没有?)。某些数据库服务器无法定义查询超时。某些数据库服务器可能支持查询取消,但这需要驱动程序本身跟踪这一点并异步向服务器发送取消,这可能会或可能不会在服务器上及时处理(例如,因为数据库服务器无法处理取消直到查询完成,因为连接线程当前正在处理查询)。

理论上客户端可以“放弃”查询,但这通常意味着连接本身变得不可用,因为连接的服务器端仍在工作(或者未处理服务器返回的响应)。

长话短说:这是一个难题,并不是所有的数据库都有足够的支持来允许这个 JDBC 特性。

关于java - JDBC QueryTimeout 仅适用于某些供应商,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32893421/

相关文章:

python - 如何使用python从数据库MySQL中获取行?

php - bind_param() : variables ! = 参数

c# - 将对象列表传递给 SQL Server 存储过程并使用 asp.net core 插入记录

sql - SELECT 模式/模态值 SQL

java - JarSigner - 到期后会发生什么

java - Actionbarsherlock 在 Android 4.x 中不会显示菜单项

java - 找不到类型的匹配 bean ... 依赖项

java - 我使用 CardLayout 得到 NullPointerException

php - 如何在 php 中检查和取消选中复选框时更新 mysql 表?

sql - 通过 Powershell 连接到 SQL Server(非本地)