복붙노트

[SQL] 자바 SQL : Statement.hasResultSet ()?

SQL

자바 SQL : Statement.hasResultSet ()?

내 애플과 같은 것과 같은 차이가있다, 다른 하나 개 플랫폼과 SQLite는에서 MySQL을 사용하여 사용자의 DELETE와 같은 쿼리를 사용하는 경우 :

이것은 또는 SQLite는 구현 (나는 그것을 반환 null로되어 생각)의 버그가 될 수도 있고 그렇지 않을 수도 있지만 어떻게 든이 처리해야합니다.

나는 시도 {...} 캐치 (예외 : SQLException 전자) {...}를 사용하여 예외 메시지는 "더의 ResultSet 가능"없는 경우, 단순히 수동으로 널 (null)을 반환 할 수 있습니다. 이것은 비록 그것을 할 수있는 올바른 방법처럼 생각하지 않습니다.

그게 JDBC 드라이버를 사용하고 있는지에 대한 점검을 만드는 경우를두고 따라 반응, 그러나 다시, 그 문제에 대한 좋은 솔루션처럼 생각하지 않습니다 수 있습니다.

무엇 나도 .hasResultSet 같은 방법 () 정말 싶습니다 반환 부울 ​​또는 실행 한 성명에서 SQL 명령 (SELECT, UPDATE, INSERT 등)을 얻을 수있는 방법. 그래도 난 SQL API의 두 가지 중 어느 것도 찾을 수 있습니다.

해결법

  1. ==============================

    1.반환 결과를 알 수없는 양, 당신은 실행 사용해야하는 쿼리를 실행하면 (). 이 방법은 결과의 종류를 나타내는 부울을 반환합니다 :

    반환 결과를 알 수없는 양, 당신은 실행 사용해야하는 쿼리를 실행하면 (). 이 방법은 결과의 종류를 나타내는 부울을 반환합니다 :

    결과가 사실이라면, 당신은 그렇지 getUpdateCount 메소드 ()가 갱신 카운트를 검색, 결과 집합을 검색하는 데에, getResultSet ()를 사용합니다. 갱신 카운트가 -1이 결과가없는 것을 의미한다. 업데이트 카운트는 것이라고 -1 현재 결과가 ResultSet 때 참고. 거기 더 이상 결과가 없거나 결과가 갱신 카운트 경우 SQL 라이트의 행위가 예외를 던질 수 있도록, 잘못된 것 같다 경우에, getResultSet ()가 null을 반환해야 함을 알고도 좋다.

    이제 당신은 더 많은 결과를 검색하려는 경우, 당신은 getMoreResults가 () (또는 INT 매개 변수를 받아 그 형제)로 전화하십시오. 이 방법의 부울 반환 값이 거짓 결과가없는 것을 의미하지 않도록 () 실행의 것과 동일한 의미를 갖는다!

    getMoreResults가 ()가 false를 반환하고 getUpdateCount 메소드 () 반환 -1 (뿐만 아니라 자바 독에 설명 된) 경우에만 더 이상 결과가 있습니다

    기본적으로이 방법이 제대로 당신이 좋아하는 일을하는 데 필요한 모든 결과를 처리하려는 경우 :

    PreparedStatement pstmt = connection.prepareStatement(...);
    // ...
    boolean result = pstmt.execute();
    while(true)
        if (result) {
            ResultSet rs = pstmt.getResultSet();
            // Do something with resultset ...
        } else {
            int updateCount = pstmt.getUpdateCount();
            if (updateCount == -1) {
                // no more results
                break;
            }
            // Do something with update count ...
        }
        result = pstmt.getMoreResults();
    }
    
  2. ==============================

    2.문제는 당신이 삭제 작업을 수행하기 위해 잘못된 방법을 사용하는 것입니다. 대신 (문자열)의 getResultSet 당신이 문 번호가 실행 사용해야 사용

    문제는 당신이 삭제 작업을 수행하기 위해 잘못된 방법을 사용하는 것입니다. 대신 (문자열)의 getResultSet 당신이 문 번호가 실행 사용해야 사용

    이럴 SQLite는 구현에서 예외는 MySQL 용 널 (null)보다 더 유효합니다. 로 삭제는 설정하지만 삭제 된 행의 스칼라 값을 반환하지 않습니다.

  3. from https://stackoverflow.com/questions/14213824/java-sql-statement-hasresultset by cc-by-sa and MIT license