JDBC QueryTimeout仅适用于某些供应商

时间:2015-10-01 17:29:06

标签: java mysql sql-server oracle jdbc

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

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

2 个答案:

答案 0 :(得分:0)

我认为,驱动程序超时不是很高精度...... setQueryTimeout有效。它不是很精确。大部分时间都花在等待取消请求上。

答案 1 :(得分:0)

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

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

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