문제

java 연결이 마침내 블록으로 연결 되나요?.

.NET SQLConnection.close가 수행한다는 것을 알고 있습니다.

이것으로 나는 캐치없이 시도/마침내 블록을 만들 수 있습니다 ...

예시:

try {
    conn.setAutoCommit(false);
    ResultSet rs = executeQuery(conn, ...);
    ....
    executeNonQuery(conn, ...);
    ....

    conn.commit();
} finally {
   conn.close();
}
도움이 되었습니까?

해결책

에 따르면 Javadoc, 가까운 방법을 호출하기 전에 커밋 또는 롤백을 시도해야합니다. 그렇지 않으면 결과는 구현 정의됩니다.

다른 팁

내가 함께 일한 모든 데이터베이스 시스템에서는 커밋 직후 롤백을하는 데 아무런 해가 없기 때문에, 시도 블록에 커밋하고 마침내 롤백이 발생하면 예외 또는 조기 반환이 발생하는 경우 상황이 커지는 반면 롤백이 거래를 롤백 할 것입니다. 안전한 일은입니다

try {
    conn.setAutoCommit(false);
    ResultSet rs = executeQuery(conn, ...);
    ....
    executeNonQuery(conn, ...);
    ....

    conn.commit();
} finally {
   conn.rollback();
   conn.close();
}

Oracle의 JDBC 드라이버는 기본적으로 Close ()에 커밋됩니다. 다중 플랫폼 JDBC 코드를 작성하려는 경우이 동작에 의존해서는 안됩니다.

동작은 데이터베이스마다 완전히 다릅니다. 예 :

신탁

이 거래는 공개 거래와의 연결을 마감 할 때 (@Mr. Shiny 및 New 安宇가 언급했듯이.

SQL 서버

거래 중간에 가까운 방법을 호출하면 거래가 롤백됩니다.

닫기 방법 (sqlserverconnection)

마침내 블록에서 롤백하는 것은 쓸모가 없습니다. 커밋하고 커밋이 성공한 후에는 왜 롤백해야합니까? 그래서 내가 당신이라면, 나는 캐치 블록에서 롤백 할 것입니다.

MySQL JDBC의 경우 구현이 커밋 또는 롤백 메소드를 호출하지 않고 닫으면 연결을 롤백합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top