본문 바로가기
Progamming/BoostCourse

JDBC란?

by 동그란 혜주 2019. 1. 22.
  • 들어가기 전에

java 언어를 사용해서 DBMS로 부터 정보를 조회하는 방법인 JDBC에 대해 알아보도록 하자.




  • 학습 목표

1. JDBC가 무엇인지 이해한다.




  • 핵심 개념

- JDBC

- DriverManager

- Connection

- Statement

- ResultSet




  • JDBC 개요

- JDBC(Java Database Connectivity)의 정의

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

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

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

- JAVA는 표준 인터페이스인 JDBC API를 제공

- 데이터베이스 벤더, 또는 기타 써드파티에서는 JDBC 인터페이스를 구현한 드라이버(driver)를 제공한다.




  • JDBC 환경 구성

- JDK 설치

- JDBC 드라이버 설치

· Maven에 다음과 같은 의존성을 추가한다. MySQL 사이트에서 다운로드한다.




  • JDBC를 이용한 프로그래밍 방법

- import java.sql.*;

- 드라이버를 로드한다.

- Connection 객체를 생성한다.

- Statement 객체를 생성 및 질의 수행

- SQL문에 결과물이 있다면 ResultSet 객체를 생성한다.

- 모든 객체를 닫는다.




  • JDBC 클래스의 생성 관계





  • JDBC 단계별 사용

1. IMPORT

import java.sql.*;
cs

2. 드라이버 로드

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

3. Connection 얻기

String dburl  = "jdbc:mysql://localhost/dbName";
 
Connection con =  DriverManager.getConnection ( dburl, ID, PWD );
cs
- 소스코드 예제

public static Connection getConnection() throws Exception{
    String url = "jdbc:oracle:thin:@117.16.46.111:1521:xe";
    String user = "smu";
    String password = "smu";
    Connection conn = null;
    Class.forName("oracle.jdbc.driver.OracleDriver");
    conn = DriverManager.getConnection(url, user, password);
    return conn;
}
cs

4. Statement 생성

Statement stmt = con.createStatement();
cs

5. 질의 수행

ResultSet rs = stmt.executeQuery("select no from user" );
 
참고
stmt.execute(“query”);             //any SQL
stmt.executeQuery(“query”);     //SELECT
stmt.executeUpdate(“query”);   //INSERT, UPDATE, DELETE
cs

6. ResultSet으로 결과 받기

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

7. Close

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

- 소스코드 예제

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;        
    }
cs
public int addGuestBook(GuestBookVO vo){
        int result = 0;
        Connection conn = null;
        PreparedStatement ps = null;
        try{
            conn = DBUtil.getConnection();
            String sql = "insert into guestbook values("
                    + "guestbook_seq.nextval,?,?,?,sysdate)";
            ps = conn.prepareStatement(sql);
            ps.setString(1, vo.getId());
            ps.setString(2, vo.getTitle());
            ps.setString(3, vo.getConetnt());
            result = ps.executeUpdate();
        }catch(Exception e){
            e.printStackTrace();
        }finally {
            DBUtil.close(conn, ps);
        }
        
        return result;
    }
cs
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();}
        }
    }
cs


'Progamming > BoostCourse' 카테고리의 다른 글

Web API란?  (0) 2019.01.22
Rest API란?  (0) 2019.01.22
Maven이란?  (0) 2019.01.22
DDL(create, alter, drop)  (0) 2019.01.22
DML(select, insert, update, delete)  (0) 2019.01.22

댓글