2016-08-03 61 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