총 10분 중 11분
2001
시즌 2개, 그리고 영화
시즌 2: 5화 “아일랜드”
출연: 이나영, 김민준, 김민정, 현빈
장르: 애초에 역경을 딛고 이룩하는 숭고한 사랑이란 없다. 그 역경 자체가 사랑이다.
프로그램 특징: 그 곳에서 살아남는 사랑이 어떤 모습으로 걸어오는지 기다려 보고 싶다.
KB_ITs_Your_Life_6th/Spring JDBC 프로그래밍
728x90
반응형

JDBC는 자바랑 디비를 연결해 데이터 입출력을 돕는 라이브러리 표준 API(인터페이스 모음),

자바와 DBMS 데이터 입출력을 위해 자바 진영에서 정의한 규격(java.sql에서 제공하는 API)

  • 표준 문법 예시
    String sql = "insert into users(id, password, name, role) values(?, ?, ?, ?)";
  • 드라이버 교체만으로 DBMS를 변경할 수 있기 때문에 특정 DBMS에 종속되지 않는 데이터베이스 연동 프로그램이 가능해진다.

JDBC Driver는 DB에서 실제 동작하는 클래스니까 각각의 DB에서 제공함

  • JDBC 인터페이스를 DBMS 벤더가 구현한 라이브러리 (클래스 모음)

 

JDBC 개발 핵심 단계 

드라이버 확인

Class.forName(”com.mysql.cj.jdbc.Driver”);

Connection

트랜잭션 처리 및 DB 연결을 끊을 때 사용

  • Connection 인터페이스는 Statement, PreparedStatement, CallableStatement 구현 객체를 생성
  • 데이터베이스 연결 세션 생성연결문자열: jdbc:mysql://127.0.0.1:3306/jdbc_ex[DB]
  • Connection conn = DriverManager.getConnection(”연결문자열”, “id”, “password”);
package org.scoula.jdbc_ex.test;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.scoula.jdbc_ex.common.JDBCUtil;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class ConnectionTest {
	@Test
	@DisplayName("jdbc_ex 데이터베이스에 접속한다.")
	public void testConnection() throws SQLException, ClassNotFoundException {
		Class.forName("com.mysql.cj.jdbc.Driver");
		String url = "jdbc:mysql://127.0.0.1:3306/jdbc_ex";
		String id = "scoula";
		String password = "1234";
		Connection conn = DriverManager.getConnection(url, id, password);
		System.out.println("DB 연결 성공");
		conn.close();
	}
}

Statement

SQL의 DDL과 DML을 실행할 때 사용한다. 주로 변경되지 않는 정적 SQL문을 실행할 때 사용한다.

  • SQL문 실행 클래스: Connection 객체를 통해 생성
    • ResultSet executeQuery : select 실행
    • int executeUpdate : insert, update, delete 실행
SQL 문 실행 클래스
○ Connection 객체를 통해 생성
Statement stmt = conn.createStatement();
○ SQL 실행 메서드
 ResultSet executeQuery(SQL문) : select문 실행
 int executeUpdate(SQL문): insert, update, delete 문 실행
 
String sql ="INSERT INTO USERS(ID, PASSWORD, NAME, ROLE)" +
"VALUES('member2', 'member123', '일반회원', 'USER')";

int count = stmt.executeUpdate(sql);

PreparedStatement

PreparedStatement는 Statement와 동일하게 SQL의 DDL, DML 문을 실행할 때 사용한다.

Statement와의 차이점은 매개변수화된 SQL문을 쓸 수 있기 때문에 편리성과 보안성이 좋다.

  • Connection 객체를 통해 생성

PreparedStatement pstmt = conn.prepareStatement(sql);

  • 파라미터 설정
    • setString(), setInt(), setLong(), setDouble()
  • pstmt.setXxxx(파라미터번호, 값)

SQL문 실행

  • int count = pstmt.executeUpdate();
SQL문에 값을 넣을 때 파라미터화 해서 처리
String userId = "member2";
String password = "member123";
String name = "일반회원";
String role = "USER";

String sql ="INSERT INTO USERS(ID, PASSWORD, NAME, ROLE)" +
"VALUES('" + userId + "', '" + password + "', '" +
name + "', '" + role + "')";

○ Connection 객체를 통해 생성
PreparedStatement pstmt = conn.prepareStatement(sql);

○ 파라미터 설정
pstmt.setXxxx(파라미터번호, 값)
⁃ setString(), setInt(), setLong(), setDouble()

SQL문 실행
int count = pstmt.executeUpdate();

CallableStatement

DB에 저장되어 있는 프로시저와 함수를 호출할 때 사용한다.

ResultSet

DB에서 가져온 데이터를 읽을 때 사용한다.

  • 컬럼값 추출

 

 

데이터 추출과 전달

DAO와 VO 디자인 패턴을 이용하면 데이터베이스 연동을 모듈화할 수 있어서 데이터베이스 연동 로직을 더 쉽게 구현할 수 있다. 

  • VO에 담아서 DAO에 전달하는 구조

DAO: DB처리 담당 클래스: Data Access Object

  • 데이터베이스에 접근하여 실질적인 데이터베이스 연동 작업과 데이터 처리를 담당하는 클래스
  • 테이블에 대한 CRUD 연산을 처리

인터페이스 정의 후 구현 클래스 작성

VO 패턴: 데이터 전달 담당 클래스

Data Transfer Object(DTO) : Value Object

입력한 데이터를 DB 전송하기 위해서 데이터를 묶는 가방 클래스

  • 특정 테이블의 한 행을 매핑하는 클래스
  • 데이터 여러개를 다 리턴할 수 없으니 가방에 데이터 넣어서 리턴
  • → entity 하나당 vo 하나 == 테이블 하나당 vo 하나

클래스 정의 → 테이블 필드들 → 컬럼들 인스턴스 → 한 행

728x90
KB_ITs_Your_Life_6th/Spring JDBC 프로그래밍