JDBC/기본

[JDBC] JDBC의 개념과 사용법

2022. 12. 13. 17:56
목차
  1. 1.JDBC?
  2. 2.JDBC 프로그래밍 흐름
  3. 3.JDBC 접속과 CRUD

1.JDBC?

:JDBC(Java Database Connectivity)는 웹 어플리케이션과 데이터베이스를 연결하는 자바 API이다. JDBC는 인터페이스를 제공하여 서로 다른 DBMS를 공통의 코드로 사용할 수 있게한다.

 

2.JDBC 프로그래밍 흐름

 

2.1 전체흐름

 

1) 드라이버에 로드하기

2) 연결 생성하기

3) 문장 실행하기

4) 결과집합 사용하기

 

(1) Class.forName("oracle.jdbc.driver.OracleDriver) - 드라이버 로드하기

 

(2) Connection con = DriverManager.getConnection(...) - 연결 생성하기

 

(3) Statement st = con.createStatement() - 문장 실행하기

 

(4)  ResultSet rs = st.executeQuery(sql) - 해당 쿼리문이 들어가는 결과집합 사용하기, 깡통(rs)이 생긴다.

 

 

(5)rs.next() - 다음 Row값을 읽어 깡통(rs)에 넣는다

(6) String title = rs.getString("title") - 깡통에서 title에 해당하는 데이터를 가져온다.

 

 

코드예시

 

 

3.JDBC 접속과 CRUD

3.1.JDBC 접속

*dburl은 DBMS마다 다르다. 해당 DBMS 회사 사이트에서 사용법을 보고 사용해야한다.

 

 

3.2  CRUD

①SQL문을 작성한다

②'?'를 제외한 SQL(Prepared statement)문을 준비한다.

③'?'를 채워 SQL문을 완성한다.

④완성된 SQL문을 실행한다.

 

①SQL문을 작성한다

②'?'를 제외한 SQL(Prepared statement)문을 준비한다.

③첫 번째 물음표에 10.5를 채운다.

④완성된 SQL문을 DBMS안에서 실행한다. 실핸된 결과를 rs(Result set)이 가리킨다.

⑤데이터를 가져와(rs.next()) 가져온 데이터를 EmpDto에 담는다.

 

4. 예시

 

RoleDao.java

package kr.or.connect.jdbcexam.dao;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.sql.Connection;
import java.sql.PreparedStatement;

import kr.or.connect.jdbcexam.dto.Role;

public class RoleDao {
    private static String dburl = "jdbc:mysql://localhost:3306/cutePin?serverTimezone=Asia/Seoul&useSSL=false";
    private static String dbUser = "callie";
    private static String dbpasswd = "connect123!@#";

    public Role getRole(Integer roleId) {
        Role role = null;
        Connection conn =null;
        PreparedStatement ps =null;
        ResultSet rs = null;

        try {
            //load the driver to memory?
            Class.forName("com.mysql.jdbc.Driver");
            conn = DriverManager.getConnection(dburl,dbUser,dbpasswd);
            //? 에 다른게 들어갈 수 있다. set 으로 설정할 수 있음
            String sql = "SELECT  role_id,description FROM role WHERE role_id =?";
            //
            ps=conn.prepareStatement(sql);
            ps.setInt(1, roleId);
            rs = ps.executeQuery();
            // 있으면, 객체 리턴. 없으면  false리턴
            if(rs.next()) {
                int id=  rs.getInt(1);//rs.getInt("role_id"); 이렇게 해도 된다. 
                String description = rs.getString(2);
                role = new Role(id,description);
            }
        }catch(Exception e){
            e.printStackTrace();
        }finally{
            if(conn!=null) {
                try {
                    conn.close();
                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
            if(ps!=null) {
                try {
                    ps.close();
                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
            if(rs!=null) {
                try {
                    rs.close();
                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }

        return role;

    }

    public int addRole(Role role) {
        int insertCount =0;
        //드라이버 로드
        try {
            Class.forName("com.mysql.jdbc.Driver");
        }catch(ClassNotFoundException e){
            e.printStackTrace();
        }

        String sql="INSERT INTO role (role_id,description) VALUES(?,?)";
        //여기 try catch문 신기
        try(Connection conn = DriverManager.getConnection(dburl, dbUser, dbpasswd);
            PreparedStatement ps = conn.prepareStatement(sql)) {
            ps.setInt(1, role.getRoleId());
            ps.setString(2,role.getDescription());
            insertCount = ps.executeUpdate();
        }catch(Exception ex) {
            ex.printStackTrace();
        }

        return insertCount;
    }

    public List<Role> getRoles(){
        List<Role> list = new ArrayList<>();
        //driver 다운로드
        try {
            Class.forName("com.mysql.jdbc.Driver");
        }catch(ClassNotFoundException e){
            e.printStackTrace();
        }

        String sql = "SELECT description,role_id FROM role order by role_id desc";
        //위에서 받은 driver manager에서 Connection  객체를 받고, Connection 객체에서  preparedStatement 객체를 받는다.	
        try(Connection conn = DriverManager.getConnection(dburl,dbUser,dbpasswd);
            PreparedStatement ps = conn.prepareStatement(sql)){
            //try문 안에 또 try문이 있다.
            try(ResultSet rs = ps.executeQuery()){
                while(rs.next()) {
                    String description = rs.getString(1);
                    int id=rs.getInt("role_id");
                    Role role = new Role(id,description);
                    list.add(role);
                }
            }catch(Exception e){
                e.printStackTrace();
            }

        }catch(Exception ex) {
            ex.printStackTrace();
        }

        return list;
    }

    public int deleteRole(int roleId) {
        int deleteCount = 0;
        Connection conn=null;
        PreparedStatement ps = null;

        try {
            Class.forName("com.mysql.jdbc.Driver");

            conn = DriverManager.getConnection(dburl,dbUser,dbpasswd);
            String sql = "DELETE FROM role WHERE role_id=?";
            ps = conn.prepareStatement(sql);
            ps.setInt(1, roleId);
            deleteCount = ps.executeUpdate();
        }catch(Exception ex){
            ex.printStackTrace();
        }finally {
            if(ps!=null) {
                try {
                    ps.close();
                }catch(Exception ex) {

                }
            }
        }

        return deleteCount;
    }

    public int updateRole(Role role) {
        int updateCount =0;
        Connection conn=null;
        PreparedStatement ps = null;
        try {
            Class.forName("com.mysql.jdbc.Driver");
            conn=DriverManager.getConnection(dburl,dbUser,dbpasswd);
            String sql="UPDATE ROLE SET DESCRIPTION = ? WHERE role_id =?";
            ps = conn.prepareStatement(sql);
            ps.setString(1,role.getDescription());
            ps.setInt(2, role.getRoleId());
            updateCount=ps.executeUpdate();
        }catch(Exception ex) {
            ex.printStackTrace();
        }finally {
            if(ps!=null) {
                try {
                    ps.close();
                }catch(Exception ex) {

                }
            }

            if(conn!=null) {
                try {
                    conn.close();
                }catch(Exception ex) {}
            }
        }
        return updateCount;
    }
}

참조

-https://yejip.com/web/2021-06-16-JDBC2/

 

JDBC - CRUD 구현하기

전체적 구조는 이전 포스트 참고 에러가 발생될 경우가 많아서, try catch 문이 아주 많이 사용됐다. Retrieve는 Role객체를 반환해 주지만, Create,Update,Delete는 몇개가 수행되었는지 숫자정보가 반환된

yejip.com

-https://velog.io/@dyunge_100/DB-JDBC%EC%97%90-%EB%8C%80%ED%95%9C-%EC%A0%95%EB%A6%AC

 

[DB] JDBC에 대한 정리

JDBC(Java Database Connectivity)는 자바에서 데이터베이스에 접속할 수 있도록 하는 자바 API다. JDBC를 통해서 DBMS의 종류에 상관없이 데이터베이스를 연결하고 작업을 처리할 수 있다. JDBC의 특징과 역

velog.io

 

SQL부터 Spring Data JPA까지 (https://www.youtube.com/watch?v=Kdt4TpP4nm8&list=PLHpaQi-LiUCxVX_GuPu42vdAbcBz8Bvdc&index=24&ab_channel=%EB%B6%80%EB%B6%80%EA%B0%9C%EB%B0%9C%EB%8B%A8-%EC%A6%90%EA%B2%81%EA%B2%8C%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D%EB%B0%B0%EC%9A%B0%EA%B8%B0)

  1. 1.JDBC?
  2. 2.JDBC 프로그래밍 흐름
  3. 3.JDBC 접속과 CRUD
각시탈코더
각시탈코더
각시탈코더
각시탈코더
각시탈코더
전체
오늘
어제
  • 분류 전체보기 (203)
    • java (46)
      • 객체지향 (20)
      • 기본문법 (8)
      • 자바의 정석 연습문제 오답노트 (9)
      • 백준 알고리즘 (9)
    • Spring (17)
      • SpringMVC (8)
      • Spring DI와 AOP (5)
      • REST API와 Ajax (1)
      • Spring 프로젝트 (1)
      • Spring Security (0)
    • DB (47)
      • Oracle (15)
      • SQL오답노트 (25)
      • 튜닝 (0)
      • ERD (1)
      • DB 모델링 (5)
    • Servlet & JSP (3)
    • JDBC (2)
      • 기본 (1)
      • 스프링JDBC (1)
    • MyBatis (2)
    • JavaScript (2)
      • 코딩애플 (0)
      • 문법 (1)
    • React (0)
      • 코딩애플 (0)
    • HTML (0)
      • 모던 웹을 위한 HTML5+CSS3 바이블 (0)
    • CSS (0)
      • 모던 웹을 위한 HTML5+CSS3 바이블 (0)
    • Linux (0)
    • Git & GitHub (2)
      • Git (1)
    • CS (19)
      • 네트워크 (6)
      • HTTP (7)
      • 컴퓨터구조 (0)
      • 자료구조와 알고리즘 (2)
      • 기타 (4)
    • 개발설정 (2)
    • 기술면접 (0)
      • JAVA (0)
      • Spring (0)
      • DB (0)
      • 네트워크 (0)
      • 공통 (0)
    • 프로젝트 (2)
      • 게시판만들기 (2)
    • 기혁씨의 삽질표류기 (28)
    • 참고자료 (2)
      • 국비수업 (0)
      • 당당 프로젝트 (1)
    • 뉴렉처 (17)
      • 자바 (11)
      • 자바스크립트 (3)
      • 키워드 (0)
      • 숙제 (0)
      • CSS (0)
      • DB (3)
      • 서블릿 (0)
      • 스프링 (0)
      • DOM (0)
    • 내가 만든 학습그림 (3)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • Oracle
  • 오류
  • 알고리즘
  • 자바의정석
  • 공부
  • 개발자
  • 연습문제
  • 백준
  • 오라클
  • 에러
  • db
  • spring
  • It
  • 서브쿼리
  • Java
  • 객체지향
  • 백엔드
  • 코딩
  • 모두의네트워크
  • 뉴렉처
  • SQL
  • 네트워크
  • 자바
  • 자바의정석기초편
  • 배열
  • 프로그래머스
  • 쿼리
  • 웹프로그래밍
  • 스프링
  • 국비수업

최근 댓글

최근 글

hELLO · Designed By 정상우.
각시탈코더
[JDBC] JDBC의 개념과 사용법
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.