Java_19_JDBC(Java DataBase Connect)

OngTK·2025년 8월 2일

Java

목록 보기
19/35

1. JDBC


자바와 DB를 연결해주는 라이브러리

1) 라이브러리 준비

  • JDBC MySQL (https://dev.mysql.com/downloads/connector/j/)
    → Platform Independent (Architecture Independent)
    → ZIP Archive
    → mysql-connector-j-9.3.0.jar
    → 프로젝트 내 패키지로 이동 후 라이브러리 설치

2) 연동코드

MVC 패턴에서 DB와 연결을 담당하는 Dao 클래스에 DB 연동을 위한 코드를 작성

public class Dao {
    // [1] 싱글톤 선언 =====================================================
    private Dao() {
        // [] Dao 객체 생성과 동시에 DB 연동 시작을 위한 메소드 실행
        connectDB(); 
    }
    private static final Dao instance = new Dao();
    public static Dao getInstance() { return instance; }

    // [2] DB 연동에 필요한 정보 작성 ========================================
    // [2.1] DB연동 경로와 DB명을 선언
    // 외부 DB 이용 시 [ 경로(localhost) : 포트(3306) / DB명칭 ] 작성
    private String db_url = "jdbc:mysql://localhost:3306/DBName";
    // [2.2] db user name 작성
    private String db_user = "root";
    // [2.3] db user password 작성
    private String db_pw = "1234";

    // DB연동 결과를 저장하기 위한 인터페이스
    // 자세한 설명은 하단 참고
    Connection conn;    

    // [3] DB 연동 함수 ================================================
    public void connectDB() {
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
            // [3.1] DB 연동 클래스(구현체) DriverManager
            // [3.2] DB 연동 함수 : .getConnection( 주소 , 계정 , 비밀번호)
            conn = DriverManager.getConnection(db_url, db_user, db_pw);
        } catch (ClassNotFoundException e) {
            System.out.println("[경고] MySQL 드라이버 로드 실패 "+e);
        } catch (SQLException e) {
            System.out.println("[경고] DB 연동 실패 " + e);
        }
    } // func end
} // class end

3) 핵심 인터페이스

(1) Connection, DB 연동

① Connection

  • DB 연동 후 연동 결과를 보관하는 인터페이스

② DriverManager

  • DB 연동 클래스(구현체) DriverManager

③ .getConnection(db_url, db_user, db_pw)

  • DB 연동 함수 : .getConnection( 주소 , 계정 , 비밀번호)

④ PreparedStatement ps = conn.prepareStatement(sql);

  • 기재된 상태의 인터페이스 변수명 = DB연동.기재함수(SQL문법);
  • String sql = "insert into tb명( 속성1, 속성2 ) values( ? , ? )";

(2) PreparedStatement, SQL 조작

① .execute();

  • 실행 함수

② .executeQuery();

  • Select 문법 실행 결과를 ResultSet 타입으로 반환

③ .executeUpdate();

  • insert, update, delete 문법 실행 결과, sql 성공 레코드 수를 int 타입으로 변환

④ .set타입(?번째, 변수);

  • ?번째에 변수 값을 대입하는 함수
  • executeUpdate 이전에 실행하여 sql 문을 작성하는 역할

(3) ResultSet, SQL 실행 조작

① rs.next();

  • 조회된 레코드 중에서 다음 레코드 이동 함수

② rs.get타입("속성명" or colNo);

  • 현재 레코드에서 지정한 속성명의 값 반환 함수

public class Dao {
    // 1) User 테이블 insert : SQL 고정
    public boolean userInsert() {
        // SQL 작성
        String sql = "insert into user( uname, uage ) values('유재석',40 )";
        try {
            // SQL 기재
            PreparedStatement ps = conn.prepareStatement(sql);
            // SQL 실행
            int count = ps.executeUpdate(); // SQL 실행 결과 insert 레코드 수를 int로 반환
            // SQL 결과 확인
            System.out.println(count);
            return true;
        } catch (SQLException e) {
            System.out.println("[경고] 예외발생 " + e);
        }
        return false;
    } // func end

    // 2) User 테이블 insert : 매개변수 활용
    public boolean userInsert2(String uname, int uage) {
        try {
            // SQL 작성
            String sql = "insert into user( uname, uage ) values( ? , ? )";
            // SQL 기재
            PreparedStatement ps = conn.prepareStatement(sql);
            // SQL에 매개변수 대입하기!! ☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
            // ps.set타입( ?순서, 변수)
            ps.setString(1, uname);
            ps.setInt(2, uage);
            // SQL 실행
            int count = ps.executeUpdate();
            // SQL 결과 확인
            if (count >= 1) return true;
            return false;
        } catch (SQLException e) {
            System.out.println("[예외발생] " + e);
        }
        return false;
    } // func end

    // 3) Select
    // User table 을 select
    public void userSelect() {
        try {
            // SQL 작성
            String sql = "select * from user;";
            // SQL 기재
            PreparedStatement ps = conn.prepareStatement(sql);
            // SQL 매개변수 대입 >> 없으므로 생략
            // SQL 실행 ☆★☆★☆★☆★☆★☆★☆★
            // select >> .executeQuery() >> ResultSet 타입
            ResultSet rs = ps.executeQuery();       // 조회결과 조작 인터페이스, [import java.sql] 주의!!
            // SQL 결과 확인
//            int rowNo = 0;
                     
            while (rs.next()){   // rs.next() : 다음 레코드
                System.out.printf("번호 : %d \t 이름 : %s \t 나이 : %d \n",rs.getInt(1),rs.getString(2), rs.getInt(3));
            }
        } catch (Exception e) {
            System.out.println("[예외발생] " + e);
        }
    } //func end
} // class end
profile
2025.05.~K디지털_풀스택 수업 수강중

0개의 댓글