ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • jdbc
    JDBC 2021. 12. 14. 18:11

    jdbc로 이동해서,

    오늘은 학생들의 국영수 점수를 받는 페이지들을 만들었다.

     

    기본 생성자(필수)와 모든 필드값을 매개값으로 받는 생성자(선택사항)를 하나씩 제작해 주었다.

    -> 자바빈 클래스

    overriding과 getter and setter을 VO에서 다 해 주고,

     

    DAO는 웹 서버의 DB 연동 요청이 발생할 때마다
    DataBase CRUD(create, read, update, delete)작업을 전담하는 클래스이다.

    - 일반적으로 jsp 혹은 servlet에서 유지보수 및 코드의 모듈화를 위해 별도의 DAO 클래스를 만들어 사용한다.

    테이블로부터 데이터를 읽어와 자바 객체로 변환하거나 자바 객체의 값을 테이블에 저장한다.

     

    package kr.co.jsp.score.model;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.util.ArrayList;
    import java.util.List;
    public class ScoreDAO {
    //싱글톤 디자인 패턴(객체의 생성을 단 하나로 제한하기 위한 코드 디자인 패턴)

     

    //1. 클래스 외부에서 객체를 생성하지 못하게 생성자에 private 접근 제한을 붙입니다.
    private ScoreDAO() {
    try {
    Class.forName("oracle.jdbc.driver.OracleDriver");
    }catch (ClassNotFoundException e) {
    e.printStackTrace();
    }
    }
    //2.객체를 생성할 수 있는 영역은 해당 클래스 뿐이므로 스스로의 객체를 단 하나만 생성합니다.
    private static ScoreDAO dao = new ScoreDAO();
     
    //3. 외부에서 객체를 요구할 시 공개된 메소드를 통해 2번에서 미리 만들어 놓은
    //단 하나의 객체의 주소값을 리턴합니다.
    public static ScoreDAO getInstance() {
    if(dao == null){
    dao = new ScoreDAO();
    }
    return dao;
    }
    //
    //DB관련 작업 메소드가 들어가는 공간입니다.
    Connection conn = null;
    PreparedStatement pstmt = null;
    ResultSet rs = null;
    //Connection 객체를 얻을 수 있는 유틸 메소드 선언
    private Connection getConnection() throws Exception {
    String url = "jdbc:oracle:thin:@localhost:1521:xe";
    String uid = "jsp";
    String upw = "jsp";
     
    return DriverManager.getConnection(url, uid, upw);
    }

    밑에는 VO에서 만든 메소드들을 하나씩 채워주면 된다.

     

     

    실습을 하니까 하루가 뚝딱! 마지막 시간엔 복습 차원으로 방금 배운 개념들을 글로도 배웠다.
    PreparedStatement 객체는?
    Statement 객체와 PreparedStatement 객체는 쿼리문을 실행하는 동일한 기능을 제공한다.

    그런데, PreparedStatement 객체를 사용하는 이유는 이 객체가 값 변환을 자동으로 해 주는 기능을 제공하고, 간결한 코드를 만들 수 있기 때문이다.

    PreparedStatement 객체는 값을 지정할 때마다 값 부분을 물음표로 처리하기 때문에 간단히 값을 지정할 수 있다.

    이때 첫번째 물음표의 인덱스는 1이며, 이후 물음표의 인덱스는 나오는 순서대로 인덱스의 값이 1씩 증가한다.

    음, 예를 들어
    //점수 데이터를 저장하는 메서드
    public boolean insert(ScoreVO vo) {
     
    boolean flag = false;
    String sql = "INSERT INTO scores VALUES(id_seq.NEXTVAL,?,?,?,?,?,?)"; -> 여기 물음표!
     
    try {
    conn = getConnection();
    pstmt = conn.prepareStatement(sql);
    pstmt.setString(1, vo.getName());
    pstmt.setInt(2, vo.getKor());
    pstmt.setInt(3, vo.getEng());
    pstmt.setInt(4, vo.getMath());
    pstmt.setInt(5, vo.getTotal());
    pstmt.setDouble(6, vo.getAverage());
     
    물음표는 1부터 시작한다는 것.

    'JDBC' 카테고리의 다른 글

    jdbc  (0) 2021.12.16
    jdbc  (0) 2021.12.15
Designed by Tistory.