Java가 연결 되나요? 클로즈 롤백?
-
03-07-2019 - |
문제
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 서버
거래 중간에 가까운 방법을 호출하면 거래가 롤백됩니다.
마침내 블록에서 롤백하는 것은 쓸모가 없습니다. 커밋하고 커밋이 성공한 후에는 왜 롤백해야합니까? 그래서 내가 당신이라면, 나는 캐치 블록에서 롤백 할 것입니다.
MySQL JDBC의 경우 구현이 커밋 또는 롤백 메소드를 호출하지 않고 닫으면 연결을 롤백합니다.
제휴하지 않습니다 StackOverflow