이 기사에서는 JDBC를 기반으로 한 창고 안팎의 거래, 은행 양도 및 상품의 Java 구현에 대해 설명합니다. 다음과 같이 참조에 대해 공유하십시오.
1. 이전 사업
전송이 2 SQL 문 (업데이트 업데이트)을 실행해야하고 두 가지 모두 성공하면 거래가 제출됩니다. 실패하면 두 사람 모두 거래를 롤백합니다.
2. 트랜잭션에는 원자력, 일관성, 격리 및 지속성의 4 가지 속성이 있어야합니다 . 이 네 가지 속성은 일반적으로 산성 속성이라고합니다.
① 원자력. 거래는 분리 할 수없는 작업 단위이며, 거래에 포함 된 모든 운영은 완료되었는지 여부입니다.
② 일관성. 거래는 데이터베이스를 한 일관된 상태에서 다른 상태로 변경하는 것입니다. 일관성은 원자력과 밀접한 관련이 있습니다.
③ 격리. 거래 실행은 다른 거래에 의해 방해 될 수 없습니다. 즉, 거래 내의 운영과 사용 된 데이터는 다른 동시 거래에서 격리되며 동시에 실행 된 거래는 서로를 방해 할 수 없습니다.
내구성. 영구성을 영속성이라고도합니다. 즉, 트랜잭션이 커지면 데이터베이스의 데이터 변경이 영구적이어야합니다. 다른 후속 운영 또는 실패는 그들에게 영향을 미치지 않아야합니다.
3. 전송 작업을 사례로 사용하는 데모 설명은 다음과 같습니다.주의 사항은 다음과 같습니다.
(1) SQL 명령문 작업에는 수동 거래 제출이 필요하지 않습니다.
(2) 쿼리 작업에는 수동 트랜잭션 제출이 필요하지 않습니다.
(3) 그러나 수동 거래 제출이 필요한 업데이트, 삽입 및 삭제
(4) 잔액이 음수 인 경우 먼저 결과를 쿼리 한 다음 판단한 다음 작동 할 수 있습니다.
(5) con.setAutoCommit(false); 수동으로 거래를 시작합니다. con.commit(); 수동으로 거래를 커밋합니다. con.rollback(); 거래 롤백 작동
4. 먼저 데이터 테이블 또는 두 개의 데이터 테이블을 만듭니다. 여기에서는 데모의 명확성을 위해 두 개의 데이터 테이블을 만듭니다.
5. 데이터베이스 및 데이터 테이블을 작성한 다음 Tool Class Basedao.java를 작성하십시오.
패키지 com.bie.utils; import java.sql.connection; import java.sql.drivermanager; import java.sql.preparedstatement; import java.sql.resultset; import java.sql.sql.sqlexection;/*** @author biehongli* @versory 27, at 10:09, 10:09, 10 위. 데이터베이스*/public class basedao {private static string driver = "com.mysql.jdbc.driver"; 개인 정적 문자열 URL = "jdbc : mysql : /// test"; 개인 정적 문자열 user = "루트"; 개인 정적 문자열 비밀번호 = "123456"; /*** * 데이터베이스에 연결하는 메소드 * @return * @throws classNotFoundException * @throws sqlexception */public static connection getCon ()는 classNotFoundException, sqlexception {class.forname (driver); // 데이터베이스 드라이버 시스템을로드합니다. Connection Con = DriverManager.getConnection (URL, 사용자, 암호); System.out.println ( ""테스트 데이터베이스 링크 "); 반환 사기; }/ *** * 데이터베이스를 닫는 메소드 * @param con * @param ps * @param rs */ public static void close (Connection con, repesttatement ps, resultset rs) {if (rs! = null) {// 예외를 피하려면 리소스를 닫으십시오. {rs.close (); } catch (sqlexception e) {// todo 자동 생성 캐치 블록 e.printstacktrace (); }} if (ps! = null) {try {ps.close (); } catch (sqlexception e) {// todo 자동 생성 캐치 블록 e.printstacktrace (); }} if (con! = null) {try {con.close (); } catch (sqlexception e) {// todo 자동 생성 캐치 블록 e.printstacktrace (); }}} / *** * * @param sql * @param arr * @return * / public static boolean addupdateLete (String SQL, Object [] arr) {Connection con = null; 준비된 상태 ps = null; {con = basionao.getCon (); // 1 단계 : 데이터베이스에 연결하는 작업 PS = con.preparestatement (sql); // 2 단계 : Precompile // 3 단계 : 값을 설정합니다. }} int count = ps.ExecuteUpdate (); // 4 단계 : SQL 문을 실행합니다. } else {return false; }} catch (classNotFoundException e) {// todo 자동 생성 캐치 블록 e.printstacktrace (); } catch (sqlexception e) {// todo 자동 생성 캐치 블록 e.printstacktrace (); } false를 반환합니다. } /*public static void main (String [] args) {try {basionao.getCon (); } catch (classNotFoundException e) {// TODO 자동 생성 캐치 블록 E.PrintStackTrace (); } catch (sqlexception e) {// todo 자동 생성 캐치 블록 e.printstacktrace (); }}*/}6. 테스트는 주요 방법에서 직접 수행되므로 테스트를 위해 userDAO를 썼고 효과를 살펴 봅니다.
package com.bie.dao; import java.sql.connection; import java.sql.preparedstatement; import java.sql.sqlexception; import com.bie.utils.basedao;/*** @uthor biehongli*@version creation time : 2017 년 2 월 27 일, 3:19:49 pm*/*/* - * (1) SQL 명령문 작업에는 수동 트랜잭션 제출이 필요하지 않습니다 * (2) 쿼리 작업은 수동 트랜잭션 제출이 필요하지 않습니다. * (3) 그러나 수동 트랜잭션 제출이 필요하지 않습니다. 준비 상태 ps1 = null; 준비된 상태 ps2 = null; Try {// 1 단계 : 데이터베이스 Con = basionao.getCon ()에 연결하는 작업; // 트랜잭션은 기본적으로 자동으로 제출되므로 기본값은 참입니다. 이제 true로 변경되면 기본 자동 트랜잭션은 금지되어 있습니다. //con.setautocommit(true); // 트랜잭션 1 : false로 설정된 경우 트랜잭션은 수동으로 제출해야합니다. // 2 단계 : 업데이트 된 SQL 문 문자열 sql = "update bank_a set usera_rmb = usera_rmb-500 여기서 usera_id = 1"; 문자열 sql2 = "update bank_b set userb_rmb = userb_rmb+500 여기서 userb_id = 1"; // 3 단계 : 사전 컴파일 SQL PS1 = con.preparestatement (SQL); // 4 단계 : SQL 문을 실행합니다. SQL이 실행되었지만 데이터베이스 PS1.ExecuteUpdate ()에 지속되지 않고 업데이트되지 않았습니다. // 3 단계 : 사전 컴파일 SQL2 ps2 = con.preparestatement (sql2); // 4 단계 : SQL2를 실행합니다. SQL2가 실행되지만 데이터베이스 PS2.ExecuteUpdate ()에 지속되지 않고 업데이트되지 않았습니다. System.out.println ( "전송 성공 ..."); // 트랜잭션 2 : 트랜잭션을 수동으로 커밋합니다. 두 실행이 모두 성공하면 거래 con.commit ()을 커밋하십시오. } catch (classNotFoundException e) {e.printstacktrace (); 시도 {// 트랜잭션 3 : 예외가 발생하면 트랜잭션 con.rollback ()을 롤백합니다. } catch (sqlexception e1) {e1.printstacktrace (); }} catch (sqlexception e) {e.printstacktrace (); } 마침내 {// 예외를 피하기 위해 리소스를 닫으십시오 (con, ps1, null); basionao.close (null, ps2, null); }}}데모 효과는 다음과 같습니다.
Java 관련 컨텐츠에 대한 자세한 내용은이 사이트의 주제를 확인하십시오. "JDBC를 사용하여 데이터베이스를 운영하는 Java의 기술 요약", "Java+MySQL 데이터베이스 프로그래밍 요약", "Java 데이터 구조 및 알고리즘에 대한 튜토리얼", "Java File 및 Directory Operation Skills의 요약", "Java Operation Dom Node Skyled의 요약"및 "Java Operation Skills"및 "요약". 기술 "
이 기사가 모든 사람의 Java 프로그래밍에 도움이되기를 바랍니다.