IT자료실/Java

Java (java.sql 패키지-2)

Ramda 2022. 4. 22. 00:03

JDBC를 위한 utility

  • 5가지 단계에서 코드를 간결하게 하는 방식을 알아보자
  • 먼저 특정 DB로부터 Connection을 획득하고 종료하는 JDBCUtil class를 작성한다.
public class JDBCUtil {
public static Connection getConnection() {
    try {
        DriverManager.registerDriver(new 드라이버 이름());

        String jdbcUrl = "JDBC URL 입력";
        Connection con = DriverManager.getConnection(jdbcUrl, "ID", "Password");
    } catch (SQLException e) {
        e.printStackTrace();
    }
    return con;
}

public static void close(PreparedStatement sta, Connection con) {
    try {
        sta.close();
    } catch (SQLException e) {
        e.printStackTrace();
    }

    try {
        con.close();
    } catch (SQLException e) {
        e.printStackTrace();
    }
}
}
  • JDBCUtil 클래스를 만들면 1단계와 2단계를 간결하게 할 수 있다.
    (Collection을 획득하는 코드를 JDBCUtil.getConnection() 메서드로 대체)
  • finally 블록 안의 try ~ catch문을 JDBCUtil.close() 메서드로 대체한다.
import java.sql.Connection;  
import java.sql.DriverManager;  
import java.sql.PreparedStatement;  
import java.sql.SQLException;

public class 클래스이름 {
public static void main(String[] args) {

    try {

        con = JDBCUtil.getConnection();

        String sql = "insert into 테이블이름 values(?, ?, ?, ?)";
        sta = con.prepareStatement(sql);

        sta.set데이터타입(1, 값);
        sta.set데이터타입(2, 값);
        sta.set데이터타입(3, 값);
        sta.set데이터타입(4, 값);

        int count = sta.executeUpdate();
        System.out.println(count + "건 데이터 처리 성공!");
    } catch (SQLException e) {
        e.printStackTrace();
    } finally {
        JDBCUtil.close(sta, con);
    }
}
}

Select를 이용하여 결과 받기

  • DB가 조회한 Select 결과를 받으려면 ResultSet 인터페이스를 이용한다.
  • select 결과 처리를 위해 ResualtSet 객체 구조를 알아야 한다.
  • ResultSet
    • 문서 작업 시 사용하는 커서의 개념이 있다.
    • ResualtSet 객체에는 Before first, After Last라는 데이터가 없는 영역 존재
    • ResultSet객체가 반환되면 커서는 BeforeFirst에 자동으로 위치한다.
    • ResultSet 객체에 next() 메서드를 사용해야 데이터를 읽을 수 있다.
  • JDBCUtil 클래스 하부에 아래와 같은 코드를 추가한다.
public static void close(ResultSet rs, PreparedStatement sta,  
Connection con) {  
try {  
rs.close();  
} catch (SQLException e) {  
e.printStackTrace();  
}

    try {
        sta.close();
    } catch (SQLException e) {
        e.printStackTrace();
    }

    try {
        con.close();
    } catch (SQLException e) {
        e.printStackTrace();
    }
  • JDBCUtil 클래스에 추가한 뒤 5단계까지 마무리 지은 클래스를 수정한다.
import java.sql.Connection;  
import java.sql.PreparedStatement;  
import java.sql.ResultSet;  
import java.sql.SQLException;

public class 클래스 이름 {
public static void main(String[] args) {

    Connection con = null;
    PreparedStatement sta = null;
    ResultSet rs = null;

    try {
        con = JDBCUtil.getConnection();

        String sql = "select * from 테이블 이름";
        sta = con.prepareStatement(sql);

        rs = sta.executeQuery();

        while(rs.next()) {
            System.out.print(rs.get데이터타입("칼럼이름");
            System.out.print(rs.get데이터타입("칼럼이름");
            System.out.print(rs.get데이터타입("칼럼이름");
            }

    } catch (SQLException e) {
        e.printStackTrace();
    } finally {
        JDBCUtil.close(rs, sta, con);
    }
}
}

DAO 패턴 (Data Access Object)

  • 지금까지 배운 단계별과정을 사용하면 너무 복잡하다.
    문서를 읽어 들일 때 간결성을 얻기 위해 DAO패턴을 많이 사용한다.
  • 먼저 자료가 들어갈 DAO 클래스를 만든다.
import java.sql.Connection;  
import java.sql.PreparedStatement;  
import java.sql.ResultSet;  
import java.sql.SQLException;

public class DAO {

private Connection con = null;  
private PreparedStatement sta = null;  
private ResultSet rs = null;

private String 테이블이름\_LIST = "select 칼럼이름, 칼럼이름, 칼럼이름, from 테이블이름";

public void getStudentList() {  
try {  
con = JDBCUtil.getConnection();  
sta = con.prepareStatement(테이블이름\_LIST);  
rs = sta.executeQuery();  
while(rs.next()) {  
System.out.print(rs.get데이터타입("칼럼이름");  
System.out.print(rs.get데이터타입("칼럼이름");  
System.out.print(rs.get데이터타입("칼럼이름");  
}  
} catch (SQLException e) {  
e.printStackTrace();  
} finally {  
JDBCUtil.close(rs, sta, con);  
}  
}  
}
  • 작성된 DAO 클래스를 이용해 목록을 작성할 수 있다.
public class 클래스이름 {  
public static void main(String\[\] args) {  
DAO dao = new DAO();

dao.get클래스이름List();

}  
}
  • 이제 CRUD를 이용할 수 있다.
  • INSERT 이용해 보기

import java.sql.Connection;  
import java.sql.PreparedStatement;  
import java.sql.ResultSet;  
import java.sql.SQLException;

private String 테이블이름\_LIST = "select 칼럼이름, 칼럼이름, 칼럼이름, from 테이블이름";  
private String 테이블이름\_INSERT = "insert into 테이블이름 values(?, ?, ?, ?)";

public void insertStudent(데이터타입 칼럼이름, 데이터타입 칼럼이름, 데이터타입 칼럼이름) {  
try {  
con = JDBCUtil.getConnection();  
sta = con.prepareStatement(테이블이름\_INSERT);  
sta.set데이터타입(1, 값);  
sta.set데이터타입(2, 값);  
sta.set데이터타입(3, 값);  
sta.executeUpdate();  
} catch (SQLException e) {  
e.printStackTrace();  
} finally {  
JDBCUtil.close(sta, con);  
}  
}

public void get테이블이름List() {  
출력내용  
}

public class 클래스이름 {

public static void main(String\[\] args) {  
DAO dao = new DAO();

dao.insert테이블이름(들어갈 칼럼의 값들 입력);

dao.get테이블이름List();

}  
}
  • INSERT의 예시만 들었지만 위와 같은 방법으로 Update, Delete를 전부 사용한다.
  • Update 같은 경우 아래 코드를 추가
INSERT에 이어서  
private String 테이블이름\_UPDATE = "update 테이블이름 set 칼럼 = ?, 칼럼 = ? where 기본키 칼럼 = ?";

public void update테이블이름(데이터타입 칼럼, 데이터타입 칼럼, 데이터타입 칼럼) {  
try {  
con = JDBCUtil.getConnection();  
sta = con.prepareStatement(테이블이름\_INSERT);  
sta.set데이터타입(1, 값);  
sta.set데이터타입(2, 값);  
sta.set데이터타입(3, 값);  
sta.executeUpdate();  
} catch (SQLException e) {  
e.printStackTrace();  
} finally {  
JDBCUtil.close(sta, con);  
}  
}
  • 사용 클래스
public class 클래스이름 {  
public static void main(String\[\] args) {  
DAO dao = new DAO();

dao.update테이블이름(들어갈 칼럼의 값들 입력);

dao.get테이블이름List();

}  
}
  • Delete 같은 경우 아래 코드를 추가
Update에 이어서  
private String 테이블이름\_DELETE = "delete 테이블이름 where 칼럼 = ?";

public void delete테이블이름(테이터타입 칼럼이름) {  
try {  
con = JDBCUtil.getConnection();  
sta = con.prepareStatement(테이블이름\_DELETE);  
sta.set데이터타입(1, 값);  
sta.executeUpdate();  
} catch (SQLException e) {  
e.printStackTrace();  
} finally {  
JDBCUtil.close(sta, con);  
}  
}
  • 사용 클래스
public class 클래스이름 {

public static void main(String\[\] args) {  
DAO dao = new DAO();

dao.delete테이블이름(들어갈 칼럼의 값들 입력);

dao.get테이블이름List();

}

}  

'IT자료실 > Java' 카테고리의 다른 글

jar와 war에 대해서  (0) 2022.05.30
Java (Thread)  (0) 2022.04.26
Java (java.sql 패키지-1)  (0) 2022.04.21
Java (java.io 패키지)  (0) 2022.04.20
Java (인터페이스, 클래스 동시 상속 예제)  (0) 2022.04.19