Java 트랜잭션 상세 정보 및 간단한 응용 사례
Java 사무는 몇몇 면접에서 질문을 받을 수 있다.
면접을 볼 때 우리가 먼저 대답해야 할 것은 사무가 데이터의 완전성과 일치성을 확보할 수 있다는 것이다.
만약 공력이 좀 깊다면: 원리(퀘스트 시작 전에 퀘스트를 제출하지 않고 모든 퀘스트가 완성된 후에 퀘스트를 제출하고,
만약 임무가 중간에서 끊어진다면 롤백을 실행하고 앞에서 수행한 임무를 취소한다. 간단하게 예를 들면 (예를 들어 저금과 돈을 찾는 문제).
예를 들어 은행이 두 계좌 사이를 이체하고 A계좌에서 B계좌로 1000원을 이체하면 시스템은 먼저 A계좌의 1000원을 줄인 다음에 B계좌로 1000원을 증가시킨다.만약 모든 실행이 성공한다면 데이터베이스는 일치성에 있다.A계정 금액의 수정만 수행하고 B계정의 금액이 증가하지 않으면 데이터베이스가 일치하지 않는 상태입니다. 이때 앞의 조작을 취소해야 합니다.)
본고는 자바 사무에 대해 간단한 연구를 하고 자바 사무를 물으면 데이터베이스와 관련이 있다는 것을 알아야 한다.
1. 간단한 코드를 먼저 본다
JDBC 방식으로 트랜잭션 처리
public int delete(int sID) {
//
DataBaseConnection dbc = new DataBaseConnection();
//
Connection con = dbc.getConnection();
try {
con.setAutoCommit(false);// JDBC
dbc.executeUpdate("delete from xiao where ID=" + sID);
dbc.executeUpdate("delete from xiao_content where ID=" + sID);
dbc.executeUpdate("delete from xiao_affix where bylawid=" + sID);
con.commit();// JDBC
con.setAutoCommit(true);// JDBC
dbc.close();
return 1;
}
catch (Exception exc) {
con.rollBack();// JDBC
dbc.close();
return -1;
}
}
위의 코드는 비교적 간단한 자바 업무의 집행이다.위에서 세 번 삭제 작업을 실행했는데 한 번 실행에 실패하면 작업이 롤백됩니다. 같이 성공하거나 아무것도 하지 않은 것과 같습니다.
만약 사무 관리가 없다면 앞에서 실행하면 바로 데이터베이스에 업데이트됩니다.
수행에 실패하면 다음 작업을 수행하지 않고 종료되며 데이터의 일치성을 보장할 수 없습니다.
2. 자바 사무의 기초 개념
원자(Atomicity): 트랜잭션은 완전한 작업입니다.사무의 각 단계의 조작은 분리할 수 없는 것이다.
다 집행하든지 안 하든지
정합성 보장(Consistency): 트랜잭션이 완료되면 데이터가 정합성 보장되어야 합니다.
격리성(Isolation): 데이터를 수정하는 모든 병행 업무는 서로 격리된다. 이것은 업무가 반드시 독립적이어야 한다는 것을 나타낸다.
그것은 어떠한 방식으로도 다른 사무에 의존하거나 영향을 주어서는 안 된다
영구성(Durability): 업무가 끝난 후에 데이터베이스에 대한 수정이 영구적으로 유지되고 업무 로그는 업무의 영구성을 유지할 수 있습니다
java의 사무 처리 설명: 데이터베이스를 여러 번 조작하면 매번 실행이나 절차는 하나의 사무입니다.
만약에 데이터베이스 작업이 어느 단계에서 실행되지 않거나 이상이 발생하여 업무가 실패하면 어떤 업무가 실행되고 어떤 업무가 실행되지 않습니다.
따라서 업무가 롤백되어 이전의 작업을 취소합니다......
데이터베이스 작업에서 하나의 업무는 데이터베이스에 업데이트된 ql 문장으로 구성된 분할할 수 없는 작업 단원을 가리킨다.
업무 중의 모든 작업이 정상적으로 완성되어야만 전체 업무가 데이터베이스에 제출될 수 있습니다. 만약에 작업이 완성되지 않았다면,
모든 사무를 취소해야 한다.
예를 들어 은행의 이체 업무에서 장삼이 자신의 계좌에서 1000위안을 이사의 계좌로 이체한다고 가정하면 관련 sql문장은 다음과 같다.
update account set monery=monery-1000 where name='zhangsan'
update account set monery=monery+1000 where name='lisi'
이 두 문장은 반드시 완성된 사무로 처리해야 한다.두 조항이 모두 성공적으로 집행되어야만 이 사무를 제출할 수 있다.
만약 한 마디 실패가 있다면, 모든 사무는 반드시 취소해야 한다.
connection 클래스에서 세 가지 트랜잭션 제어 방법을 제공합니다.
(1) setAutoCommit(Boolean autoCommit): 트랜잭션 자동 제출 여부를 설정합니다.
(2) commit();사무 제출;
(3) rollback();사무를 취소하다.
jdbcapi에서 기본적인 상황은 자동으로 사무를 제출하는 것입니다. 즉, 데이터베이스에 대한 업데이트된 모든 ql문장은 하나의 사무를 대표합니다.
작업이 성공하면 시스템은commit () 를 자동으로 호출하여 제출합니다. 그렇지 않으면 롤백 () 을 호출하여 업무를 취소합니다.
jdbcapi에서는 setAutoCommit (false) 를 호출하여 자동으로 업무를 제출하는 것을 금지할 수 있습니다.
그리고 여러 개의 데이터베이스 업데이트 sql 문장을 하나의 업무로 삼아 모든 작업이 끝난 후commit () 를 호출하여 전체 제출을 할 수 있습니다.
만약 그 중의 ql 작업이 실패하면commit () 방법을 실행하지 않고 해당하는 qlException을 생성합니다.
이 때 이상 코드 블록에서 롤백 () 방법을 호출하여 업무를 취소할 수 있습니다.
일반적으로 데이터베이스를 전문적으로 개발하는 개발자는 사무에 대해 깊이 있게 이해해야 한다.
그러나 일반적인 프로그래머들은 이 방면에 너무 많은 시간을 들일 필요가 없다.대략적인 작용에 대해 이해하면 된다.
읽어주셔서 감사합니다. 여러분에게 도움이 되었으면 좋겠습니다. 본 사이트에 대한 지지에 감사드립니다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JPA + QueryDSL 계층형 댓글, 대댓글 구현(2)이번엔 전편에 이어서 계층형 댓글, 대댓글을 다시 리팩토링해볼 예정이다. 이전 게시글에서는 계층형 댓글, 대댓글을 구현은 되었지만 N+1 문제가 있었다. 이번에는 그 N+1 문제를 해결해 볼 것이다. 위의 로직은 이...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.