마트철수

[047] 트랜잭션, JDBC 프로그래밍 본문

KB IT's Your Life/교육

[047] 트랜잭션, JDBC 프로그래밍

마트스 2024. 7. 15. 17:23

 
2024.07.15(월)
 
MySQL 4일차
 
ConnectionTest.java 파일 제작부터
왜 이 파일을 제작하고 있는지 이해하지 못하고 코드를 작성함 ..
> 이론 다시 듣고, 코드 천천히 읽어보기!
 


 
이것이 MySQL이다
 

PART01 MySQL 설치 및 DB 구축과정 미리 실습하기

  • CH01 DBMS 개요와 MySQL 소개
  • CH02 MySQL 설치
  • CH03 MySQL 전체 운영 실습

PART02 MySQL 기본

  • CH04 데이터베이스 모델링
  • CH05 MySQL 유틸리티 사용법
  • CH06 SQL 기본
  • CH07 SQL 고급

PART03 MySQL 고급

  • CH08 테이블과 뷰
  • CH09 인덱스
  • CH10 스토어드 프로그램
  • CH11 전체 텍스트 검색과 파티션

 

추가자료: 트랜잭션

 
하나의 단위로 데이터를 처리하는 트랜잭션
 
트랜잭션
: 더 이상 분할할 수 없는 최소 수행단위
- 하나 이상의 데이터 조작 명령어(DML)로 구성
- ALL ROR NOTHING
- CRUD에서 C, R, D는 트랜잭션 작업이 필수임
 
트랜잭션
- START TRANSACTION
- COMMIT
- ROLLBACK
▶ DML 명령에 대해서만 적용
▶ 2개 이상의 INSERT, UPDATE, DELETE 문을 실행할 때 트랙잭션 처리 필요(C, U, D)
▶ COMMIT 실행하면, 다시 복원할 수 없음(백업데이터가 있으면 가능하긴 함)

COMMIT으로 실제 DB(하드디스크)에 올려 기록

 
※ 지금까지 AUTO COMMIT 모드여서 처리하지 않아도 됐었음
 
SELECT @@autocommit;
: MySQL의 환경변수 / 이 기능이 켜져있는지 확인하는 변수임
: 두 개 이상의 수정문이 실행될 때, 트랜잭션이 필요함!
 

ch10 JDBC 프로그래밍

 
JDBC 프로그래밍

JDBC(Java Database Connectivity)
: 데이터베이스와 연결해서 입출력을 지원
 
JDBC 프로그래밍
데이터베이스 준비: CREATE DATABASE jdbc_ex;

- 이후 실습 파일 확인 -

.
.
.

PreparedStatement
: "VALUES(?, ?, ?, ?)";
# 미리 컴파일(준비)해두겠다
# SQL 문을 실행할 때 매개변수화된 쿼리를 실행하는 데 유용 → 속도도 빠름
 

실습

 
  테이블 만들기

-- usertable 생성
DROP TABLE IF EXISTS usertbl;
CREATE TABLE usertbl(
-- CHAR: 고정문자, NOT NULL: 필수, PRIMARY KEY: 기본 키
userID CHAR(8) NOT NULL PRIMARY KEY,
-- VARCHAR: 가변문자
name VARCHAR(10) NOT NULL,
-- INT: 정수형
birthYear INT NOT NULL,
addr CHAR(2) NOT NULL,
-- NULL: 옵션
mobile1 CHAR(3) NULL,
mobile2 CHAR(8) NULL,
-- SMALLINT: 작은정수형
height SMALLINT NULL,
-- DATE: 날짜형
mDate DATE NULL
);

-- AUTO_INCREMENT: 인덱스 자동 증가
num AUTO_INCREMENT INT NOT NULL primary KEY,

-- FOREIGN KEY(해당 키) REFERENCES 참조할 테이블(참조할 키)
-- 다른 테이블의 기본키를 참조하는 외래키
FOREIGN KEY(userid) REFERENCES usertbl(userID)

 
▼ 기본키 제약조건

-- CONSTRAINT PRIMARY KEY: 기본키 제약조건
CONSTRAINT PRIMARY KEY PK_userTBL_userID(userID)

-- 제약조건명은 생략 가능
-- prodCode와 prodID 컬럼을 합쳐서 복합키로 기본키를 만들었다
CONSTRAINT PK_prodTbl_proCode_prodID
PRIMARY KEY(prodCode, prodID)

 
▼ 데이터베이스 생성

-- 데이터베이스 생성
CREATE DATABASE jdbd_ex;

-- CREATE USER: 'jdbd_ex'라는 이름의 사용 생성
-- IDENTIFIED BY: 비밀번호를 'jdbc_ex'로 설정
CREATE USER 'jdbc_ex'@'%' IDENTIFIED BY 'jdbc_ex';
-- GRANT ~ ON: 권한 부여
-- ALL PRIVILEGES: 모든 권한 부여
-- 'jdbd_ex'라는 사용자에게 jdbc_ex 데이터베이스 내의 모든 권한 부여
 GRANT ALL PRIVILEGES ON jdbc_ex.* TO 'jdbc_ex'@'%';
 -- FLUSH: 권한 즉시 서버에 적용
 FLUSH PRIVILEGES;

 
▼ JUNIT

import org.junit.jupiter.api.*;

public class JunitCycleTest {
    @BeforeAll // 전체 테스트 시작전 1회 실행, static 선언
    static void beforeAll() {
        System.out.println("@BeforeAll");
    }
    @BeforeEach // 테스트 케이스를 시작하기 전마다 실행
    public void beforeEach() {
        System.out.println("@BeforeEach");
    }
    @Test
    public void test1() {
        System.out.println("test1");
    }
    @Test
    public void test2() {
        System.out.println("test2");
    }
    @Test
    public void test3() {
        System.out.println("test3");
    }
    @AfterEach // 테스트케이스를종료하기전마다실행
    public void afterEach() {
        System.out.println("@AfterEach");
    }
    @AfterAll // 전체테스트를마지고종료하기전1회. static 선언
    static void afterAll() {
        System.out.println("@AfterAll");
    }
}

 
▼ JDBC를 사용하여 MySQL 데이터베이스에 연결하기 위한 필수적인 정보들

driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/jdbc_ex
id=jdbc_ex
password=jdbc_ex