0
目前我正在嘗試下面的代碼。問題是超時後(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();
我不認爲有取消JDBC查詢一個好辦法:如果查詢未完成的時間和超時SQLException都被拋出。你可以設置一個超時:http://stackoverflow.com/questions/10947303/stop-or-terminate-long-running-query-in-jdbc – Thilo
嘗試關閉你的連接和結果集在TimeoutException塊 'rs.close( )'例如 –
您是否確實需要ExecutorService?在當前線程上調用JDBC要簡單得多,如果你要等下一行完成。 – Thilo