3

불행히도 jdbc 사양은 Statement.cancel()에 대해 침묵합니다.Statement.cancel() 및 thread 안전성 보장

javadoc으로 명시된 유일한 것은 Statement.cancel()thread-safe입니다.
그러나 :

  • 그것이 cancel() 항상 작동 할 것이라고 보장인가?
    (현재 Statement을 실행중인 스레드가 즉시 차단을 해제하고 계속되는 방식으로)
  • cancel()이 즉시 복귀하지 않는다는 보장이 있습니까? 같은 자바 독에서
+0

적어도 oracle jdbc 드라이버의 경우에는 특히 네트워크 또는 서버 측 문제의 경우에는 이러한 보장이 없습니다. http://download.oracle.com/docs/cd/E11882_01/java.112/e16548/apxtblsh .htm # BACDAICJ – MRalwasser

답변

3

cancel()이 항상 작동한다는 보장이 있습니까?

아니요. 적어도 제 경험에는 없습니다. 나는 심지어 단순히 UnsupportedOperationException를

은 그 차단하지 않습니다) (취소 보장을 던졌다 드라이버를 처리했다 생각하고 (자세한 이하) 즉시

번호를 반환 실행되는 명령문에 따라 때때로 cancel()은 쿼리의 첫 번째 행이 반환 될 때까지 대기 할 수 있습니다. 다시 이것은 드라이버에 크게 의존합니다.

+0

프로세스를 엄격하게 종료하기 위해 취소 프로세스의 시간 초과를 설정할 수 있습니까? 나는'Statement.cancel (int timeout)'메서드에 대해 생각했지만 그것을 찾지 못했습니다;) – bobbel

2

:

DBMS 및 드라이버의 양쪽 모두가 보장을 제한하는 SQL 문

을 중단합니다. 다른 제한은 Statement.cancel()이 구체적인 드라이버에 의해 구현된다는 것입니다. 즉, 구현은 Java RE의 일부가 아닙니다.

그래서 실제로는 을 취소해야합니다.은 스레드로부터 안전해야하지만 실제 드라이버/DBMS 공급 업체에 문의해야합니다.