JDBC

WebStudy / / 2021. 2. 5. 23:26

JDBC

JDBC란?

JDBC(Java Database Connectivity)

  • 자바를 이용한 데이터베이스 접속과 SQL 문장의 실행, 그리고 실행 결과로 얻어진 데이터의 핸들링을 제공하는 방법과 절차에 관한 규악
  • 자바 프로그램 내에서 SQL문을 실행하기 위한 자바 API
  • SQL과 프로그래밍 언어의 통합 접근 중 하나의 형태


자바는 표준 인터페이스인 JDBC API를 제공한다. 데이터베이스 벤더, 또는 기타 써드파티에서는 JDBC 인터페이스를 구현한 드라이버를 제공한다.


 

환경 구성

  • JDK 설치
  • JDBC 설치
    • 우리는 Maven으로 이용하기 때문에, 의존성을 추가한다.
        <dependency>   
        <groupId>mysql</groupId>   
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.45</version>
        </dependency>

 

JDBC 사용

  1. import
    • import java.sql.*;
  2. 드라이버 로드
    • Class.forName("com.mysql.jdbc.Driver");
  3. Connection 객체 생성
    • 데이터베이스에 접속을 함
    • String dburl = "jdbc:mysql://localhost/dbName";
    • Connection con = DriverManager.getConnection(dburl,ID,PWD);
  4. Statement 객체 생성 및 질의 수행
    • 쿼리문 생성 및 실행
    • 질의문 생성: Statement stmt = con.createStatement();
  5. SQL문에 결과물이 있다면 ResultSet 객체 생성
    • 질의 수행 및 ResultSet 객체 생성: ResultSet rs = stmt.executeQuery("select no from user");
    • while(rs.next()) System.out.println(rs.getInt("no"));
  6. 모든 객체 close
    • rs.close();
    • stmt.close();
    • con.close();

JDBC 클래스 생성 관계

  • DriverManager
    • Connection: DriverManager를 이용해 Coneection 인스턴스를 얻는다.
      • Statemnt: Connection을 통해 Statement를 얻는다.
        • ResultSet: 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;        
    }

데이터 베이스에서 데이터 불러오기

예제 DAO1

public class RoleDao {
    private static String dburl = "jdbc:mariadb://내-주소:3306/connectdb";
    private static String dbUser = "connectuser";
    private static String dbPasswd = "connect123!@#";
    public Role getRole(Integer roleId) {
        Role role = null;
        Connection conn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        try {
            Class.forName("org.mariadb.jdbc.Driver");
            conn = DriverManager.getConnection(dburl,dbUser,dbPasswd);
            String sql = "SELECT description,role_id FROM ROLE WHERE role_id = ?";
            ps = conn.prepareStatement(sql);
            ps.setInt(1, roleId);
            rs = ps.executeQuery();

            if(rs.next()){
                role = new Role(rs.getInt("role_id"),rs.getString(1));
            }
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            if(rs != null)
                try {
                    rs.close();
                }catch (Exception e){
                    e.printStackTrace();
                }
            if(ps != null)
                try {
                    ps.close();
                }catch (Exception e){
                    e.printStackTrace();
                }
            if(conn != null)
                try {
                    conn.close();
                }catch (Exception e){
                    e.printStackTrace();
                }
        }

        return role;
    }
}

데이터 베이스에서 데이터 삽입하기

예제 DAO2

public class RoleDao {
    private static String dburl = "jdbc:mariadb://내-주소:3306/connectdb";
    private static String dbUser = "connectuser";
    private static String dbPasswd = "connect123!@#";
    public Role addRole(Role role) {
        int insertCount = 0;
        Connection conn = null;
        PreparedStatement ps = null;
        try {
            Class.forName("org.mariadb.jdbc.Driver");
            conn = DriverManager.getConnection(dburl,dbUser,dbPasswd);
            String sql = "INSERT ROLE (role_id, description) VALUE (?, ?)";
            ps = conn.prepareStatement(sql);

            ps.setInt(1, role.getRoleId());
            ps.setString(2, role.getDescription());

            insertCount = ps.executeUpdate();
            System.out.println(insertCount);
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            if(ps != null)
                try {
                    ps.close();
                }catch (Exception e){
                    e.printStackTrace();
                }
            if(conn != null)
                try {
                    conn.close();
                }catch (Exception e){
                    e.printStackTrace();
                }
        }

        return role;
    }
}

'WebStudy' 카테고리의 다른 글

Browser  (0) 2021.02.06
HTTP  (0) 2021.02.06
프로젝트A. 명함 관리 프로그램  (0) 2021.02.05
Maven  (0) 2021.02.04
SQL  (0) 2021.02.04
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기