본문 바로가기
Everyday Study

2024.08.07 (수) { JDBC API, 의사코드, 엔티티클래스, 트랜잭션 }

by xogns93 2024. 8. 7.

JDBC (Java Database Connectivity) API

 

JDBC는 Java 언어를 사용하여 관계형 데이터베이스와 상호작용하기 위한 표준 API입니다. JDBC API는 데이터베이스 연결, SQL 쿼리 실행, 결과 처리 등을 위한 다양한 클래스를 제공하며, 이를 통해 자바 애플리케이션에서 데이터베이스 작업을 쉽게 수행할 수 있습니다.

 

주요 구성 요소

  1. DriverManager : 데이터베이스 드라이버를 관리하고, 데이터베이스에 연결하기 위한 클래스입니다.
  2. DataSource : 데이터베이스 연결을 관리하는 인터페이스로 커넥션 풀링을 지원하며, 드라이버 매니저를 대체하는 역할을 합니다. 
  3. Connection : 데이터베이스와의 연결을 나타내며, SQL 문을 실행하기 위한 메서드를 제공합니다.
  4. Statement : SQL 문을 실행하고 결과를 반환받기 위한 객체입니다.
  5. PreparedStatement : 미리 컴파일된 SQL 문을 실행하기 위한 객체로, 성능이 더 좋고 SQL 인젝션 공격을 방지할 수 있습니다.
  6. CallableStatement : 저장 프로시저를 호출하기 위한 객체입니다.
  7. ResultSet : SQL 쿼리의 결과를 나타내며, 행 단위로 데이터를 접근할 수 있습니다.
  8. SQLException : 데이터베이스와 관련된 예외를 처리하기 위한 클래스입니다.

의사코드(Pseudocode)

 

의사코드(Pseudocode)는 특정 프로그래밍 언어의 문법을 따르지 않고, 알고리즘이나 프로그램의 논리적 흐름을 이해하기 쉽게 기술하는 방법입니다. 이를 통해 알고리즘을 명확하게 설명하고, 실제 코드로 변환하기 전에 논리를 검토할 수 있습니다.

의사코드란건 그냥 한글로 이렇게 만들거야 라고 적어놓는거 !!

  


엔티티클래스

 

엔티티 클래스는 데이터베이스 테이블과 매핑되는 클래스입니다. 이를 통해 객체 지향 프로그래밍과 관계형 데이터베이스의 구조를 연결할 수 있습니다. 예를 들어, 데이터베이스의 Student 테이블을 Java 클래스에 매핑하여 이를 통해 데이터베이스 작업을 수행할 수 있습니다.

관계형 데이터베이스의 특정 테이블,  엔티티클래스의 각 객체는 Row

 

 

예제: Student 엔티티 클래스

import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;

// @Entity: 이 클래스가 데이터베이스의 테이블과 매핑된다는 것을 나타냅니다.
@Entity
// @Table: 매핑되는 테이블의 이름을 지정합니다.
@Table(name = "Student")
public class Student {

    // @Id: 이 필드가 테이블의 기본 키(primary key)임을 나타냅니다.
    @Id
    private Long id;

    // 나머지 필드들은 테이블의 컬럼에 매핑됩니다.
    private String name;
    private int age;

    // 기본 생성자
    public Student() {}

    // 매개변수가 있는 생성자
    public Student(Long id, String name, int age) {
        this.id = id;
        this.name = name;
        this.age = age;
    }

    // Getter와 Setter 메서드
    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    // toString 메서드
    @Override
    public String toString() {
        return "Student{id=" + id + ", name='" + name + "', age=" + age + '}';
    }
}

 


트랜잭션(Transaction)

 

트랜잭션은 데이터베이스에서 일련의 작업을 하나의 단위 로 처리하는 것을 말합니다. 트랜잭션의 주요 특성은 ACID입니다:

  • Atomicity (원자성): 트랜잭션의 모든 작업이 성공적으로 완료되거나, 모두 실패해야 합니다.
  • Consistency (일관성): 트랜잭션이 완료되면 데이터베이스는 일관성 있는 상태여야 합니다.
  • Isolation (격리성): 동시에 실행되는 트랜잭션들은 서로 영향을 미치지 않아야 합니다.
  • Durability (지속성): 트랜잭션이 성공적으로 완료되면, 그 결과는 영구적으로 반영되어야 합니다.

 

예제: 트랜잭션 사용

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;

public class Main {
    public static void main(String[] args) {
        // 엔티티 매니저 팩토리 생성
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("studentPU");
        EntityManager em = emf.createEntityManager();

        try {
            // 트랜잭션 시작
            em.getTransaction().begin();

            // 새로운 Student 객체 생성
            Student student = new Student(1L, "홍길동", 20);

            // Student 객체를 데이터베이스에 저장
            em.persist(student);

            // 트랜잭션 커밋 (변경 사항을 데이터베이스에 반영)
            em.getTransaction().commit();
        } catch (Exception e) {
            // 예외가 발생하면 트랜잭션 롤백
            em.getTransaction().rollback();
            e.printStackTrace();
        } finally {
            // 엔티티 매니저 종료
            em.close();
            emf.close();
        }
    }
}

 

  • em.getTransaction().begin(): 트랜잭션을 시작합니다.
  • em.persist(student): 새로운 Student 객체를 데이터베이스에 저장합니다.
  • em.getTransaction().commit(): 트랜잭션을 커밋하여 모든 변경 사항을 데이터베이스에 반영합니다.
  • em.getTransaction().rollback(): 예외가 발생하면 트랜잭션을 롤백하여 모든 변경 사항을 취소합니다.