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();
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
Versuchen Sie, Ihre Verbindung und resultset in TimeoutException blockieren 'rs.close () 'zum Beispiel –
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