본문 바로가기
Infra/Database

[Boostcourse] JDBC 설명

by Wordbe 2019. 11. 23.
728x90

JDBC

keyword

  • JDBC
  • DriverManger
  • Connection
  • Statement
  • ResultSet

JSBC(Java Database Connectivity)

  • 자바 이용한 데이터베이스 접속과 SQL 문장의 실행, 실행결과로 얻어진 데이터의 핸들링을 제공하는 방법과 절차에 관한 규약

  • 자바 프로그램내에서 SQL문을 실행하기 위한 자바 API

  • SQL과 프로그래밍 언어의 통합 접근 중 한 형태

JAVA는 표준 인터페이스인 JDBC API를 제공합니다.

데이터베이스 벤더, 써드파티에서는 JDBC 인터페이스를 구현한 드라이버(driver)를 사용합니다.

환경구성

  • JDK

  • JDBC 드라이버 설치

    Maven에 의존성 추가, MySQL 사이트에서 다운로드

    pom.xml

    <dependency>
        <groudId>mysql</groudId>
        <artifactId>mysql-connect-java</artifactId>
        <version>5.1.45</version>
    </dependency>

JDBC 사용

1) import java.sql.*;

2) 드라이버 load

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

3) Connection 객체 생성 (클라이언트가 DB 접속)

String dburl = "jdbc:mysql://localhost/dbName";
Connection con = DriverManger.getConnection(dburl, ID, PWD);

4) Statement 객체 생성 및 질의 수행 (Query문 생성 및 실행)

Statement stmt = con.createStatemnet();
ResultSet rs = stmt.executeQuery("select no from user");

질의 수행

​ stmt.execute("query"); ← any SQL

​ stmt.executeQuery("query"); ← SELECT

​ stmt.execcuteUpdate("query"); ← INSERT, UPDATE, DELETE

5) SQL문에 결과물이 있다면 ResultSet 객체를 생성 (SELECT는 표반환, INSERT, DELTETE 등은 확인 반환)

​ ResultSet로 결과 받기, DB안에서 결과를 rs 포인터가 가리키도록 합니다.

ResultSet rs = stmt.executeQuery("select no from user");
while (rs.next())
    System.out.println(rs.getInt("no"));

6) 모든 객체를 닫음 (접속 끊음, DB는 접속가능한 클라이언트 수가 제한되어있음)

rs.close();
stmt.close();
con.close();

JDBC 클래스의 생성관계

DriverManger를 통해 Connection 인스턴스를 얻습니다.

Connection 통해 Statement 얻습니다.

Statement 통해 ResultSet을 얻습니다.

소스코드 예제

public List<GuestBookVO> getGuestBookList(){
        List<GuestBookVO> list = new ArrayList<>();
        GuestBookVO vo = null;
        Connection conn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        try{
            conn = DBUtil.getConnection();
            String sql = "select * from guestbook";
            ps = conn.prepareStatement(sql);
            rs = ps.executeQuery();
            while(rs.next()){
                vo = new GuestBookVO();
                vo.setNo(rs.getInt(1));
                vo.setId(rs.getString(2));
                vo.setTitle(rs.getString(3));
                vo.setConetnt(rs.getString(4));
                vo.setRegDate(rs.getString(5));
                list.add(vo);
            }
        }catch(Exception e){
            e.printStackTrace();
        }finally {
            DBUtil.close(conn, ps, rs);
        }        
        return list;        
    }
public static void close(Connection conn, PreparedStatement ps){
        if (ps != null) {
            try {
                ps.close();
            } catch (SQLException e) {e.printStackTrace(); }
        }
        if (conn != null) {
            try {
                conn.close();
            } catch (SQLException e) {e.printStackTrace();}
        }
    }

실습

입력/수정/조회/삭제

File > New > Maven project > next 버튼 > quickstart (기본설정) >

artifactId : jdbcexam > finish 버튼

그림과 같이 java 클래스를 생성합니다.

[소스보기]

https://github.com/Wordbe/TIL/tree/master/Web/5.%20DB%20%EC%97%B0%EA%B2%B0%20%EC%9B%B9/jdbc

JDBCExam1.java

RoleDao.java

Role.java

pom.xml


Reference

https://www.edwith.org/boostcourse-web/lecture/20653/

728x90

'Infra > Database' 카테고리의 다른 글

한글 검색기 만들기  (0) 2021.08.16
[springboot] mysql database - java (JPA) 연동  (4) 2020.10.03
MariaDB 다운로드, 계정 설정  (261) 2020.07.31
[Boostcourse] SQL, MySQL  (622) 2019.11.21

댓글