2016-08-03 50 views
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(); 
+0

我不認爲有取消JDBC查詢一個好辦法:如果查詢未完成的時間和超時SQLException都被拋出。你可以設置一個超時:http://stackoverflow.com/questions/10947303/stop-or-terminate-long-running-query-in-jdbc – Thilo

+0

嘗試關閉你的連接和結果集在TimeoutException塊 'rs.close( )'例如 –

+0

您是否確實需要ExecutorService?在當前線程上調用JDBC要簡單得多,如果你要等下一行完成。 – Thilo

回答

0

您可以設置執行查詢的超時時間。

preparedstatement.setQueryTimeout(seconds); 
ResultSet resultSet = preparedStatement.executeQuery(); 

while(resultSet.next()){ 
    // do some stuff 
} 

看一看setQueryTimeout documentation