2016-08-03 10 views
0

Derzeit versuche ich unten Code.Das Problem ist nach Timeout (5 Sekunden) fangen (TimeoutException e) Block wird ausgeführt, aber nicht in der Lage, die Ausführung der Abfrage abzubrechen. Ich möchte die Ausführung nach dem Timeout abbrechen und mit dem nächsten Teil des Codes fortfahren.Wie die Ausführung der Abfrage nach Timeout zu stoppen

    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

Ich glaube nicht, dass es eine gute Möglichkeit ist es, eine JDBC-Abfrage abzubrechen. Sie könnten eine Zeitüberschreitung einstellen: http://stackoverflow.com/questions/10947303/stop-or-terminate-long-running-query-in-jdbc – Thilo

+0

Versuchen Sie, Ihre Verbindung und resultset in TimeoutException blockieren 'rs.close () 'zum Beispiel –

+0

Benötigen Sie eigentlich den ExecutorService? Das Aufrufen von JDBC für den aktuellen Thread ist viel einfacher, wenn Sie trotzdem in der nächsten Zeile auf den Abschluss warten. – Thilo

Antwort

0

Sie können eine Zeitüberschreitung beim Ausführen einer Abfrage festlegen. SQLException wird ausgelöst, wenn die Abfrage nicht abgeschlossen wird in Zeit und Zeiten aus:

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

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

Werfen Sie einen Blick auf SetQueryTimeout documentation

Verwandte Themen