如何在超时后停止执行查询
问题描述:
目前我正在尝试下面的代码。问题是超时后(5秒)catch(TimeoutException e)块正在执行但无法取消执行查询。我想在超时后取消执行并继续执行下一部分代码。如何在超时后停止执行查询
ExecutorService executor = Executors.newSingleThreadExecutor();
Future<String> future = executor.submit(new Callable() {
public String call() throws Exception {
System.out.println("task running!");
ResultSet rs = psLoadingStr.executeQuery();
return "OK";
}
});
try
{
future.get(5, TimeUnit.SECONDS); //timeout is in 5 seconds
}
catch (TimeoutException e)
{
System.err.println("Timeout");
future.cancel(true);
}
executor.shutdownNow();
答
您可以设置执行查询的超时时间。
preparedstatement.setQueryTimeout(seconds);
ResultSet resultSet = preparedStatement.executeQuery();
while(resultSet.next()){
// do some stuff
}
看一看setQueryTimeout documentation
我不认为有取消JDBC查询一个好办法:如果查询未完成的时间和超时SQLException都被抛出。你可以设置一个超时:http://stackoverflow.com/questions/10947303/stop-or-terminate-long-running-query-in-jdbc – Thilo
尝试关闭你的连接和结果集在TimeoutException块 'rs.close( )'例如 –
您是否确实需要ExecutorService?在当前线程上调用JDBC要简单得多,如果你要等下一行完成。 – Thilo