Java Bean 을 이용해서 DB 액세스 하기 – 1

JavaBean

DB Access

Java Bean 이란 어떠한 기능을 수행하는 컴포넌트이다.

DB에 접속하는 Java Bean 을 만들어서 JSP에 직접 사용해볼 계획이다. 자바 빈에는 DB에 액세스할 수 있는 멤버 변수와 메서드로 구성되어 있다.

 

컴포넌트 1 – Course 테이블에서 사용하는 클래스 생성

실제 DB 테이블에 5개의 컬럼(cno, cname, credit, dept, prname)이 있는 course 테이블이 존재한다. 이 테이블을 액세스하기 위해 ‘M’VC에서 Value Object를 먼저 생성하고 있다.

package com.course.vo;

public class Course {
    private String cno;
    private String cname;
    private String credit;
    private String dept;
    private String prname;
    
    public Course() {
        this("", "", "", "", "");
    }
    public Course(String cno, String cname, String credit, String dept, String prname) {
        super();
        this.cno = cno;
        this.cname = cname;
        this.credit = credit;
        this.dept = dept;
        this.prname = prname;
    }
    
    public String getCno() {
        return cno;
    }
    public void setCno(String cno) {
        this.cno = cno;
    }
    public String getCname() {
        return cname;
    }
    public void setCname(String cname) {
        this.cname = cname;
    }
    public String getCredit() {
        return credit;
    }
    public void setCredit(String credit) {
        this.credit = credit;
    }
    public String getDept() {
        return dept;
    }
    public void setDept(String dept) {
        this.dept = dept;
    }
    public String getPrname() {
        return prname;
    }
    public void setPrname(String prname) {
        this.prname = prname;
    }
}

 

컴포넌트 2 – Course 테이블을 이용하는 메서드 선언 & 구현

DB에서 실제 이용하려 하는 메서드들을 인터페이스로 선언한다. 이용하려 하는 메서드들의 내용은 다음과 같다.

  • 모든 과목 정보를 불러온다.
  • 특정 한 과목의 정보를 불러온다.
  • 특정 과목의 이름으로 검색한 정보를 불러온다.
  • 과목을 추가한다.
  • 과목을 수정한다.
  • 과목을 지운다.

package com.course.dao;

import java.util.List;

import com.course.vo.Course;

public interface CourseDAO {
    public List<Course> getAllCourses();
    public Course getCourse(String cno);
    public List<Course> selectCourse(String str);
    public boolean insertCourse(Course course);
    public boolean updateCourse(Course course);
    public boolean deleteCourse(String cno);
}

이와 같이 interface 를 먼저 선언한 후 다음 클래스에서 implements 하여 구현한다.

다음 DAO 구현 클래스 생성자에 Connection을 갖고오는 함수가 있는데 개발 환경마다 다르므로 다음 포스팅을 참고한다.

package com.course.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

import com.course.vo.Course;

import dbaccess.oraConnectionManager;

public class CourseDaoImpl implements CourseDAO {
    private Connection con;
    
    public CourseDaoImpl() {
        try {

con = oraConnectionManager.getConnection();
      } catch ( SQLException e ) {
            System.out.println(e.getMessage());
        }
    }

    @Override
    public List<Course> getAllCourses() {
        List<Course> clist = null;
        Course course = null;
        Statement stmt = null;
        ResultSet rset = null;
        String query = "SELECT * FROM course";
        
        try {
            stmt = con.createStatement();
            rset = stmt.executeQuery(query);
            
            while ( rset.next() ) {
                if ( clist == null ) {
                    clist = new ArrayList<Course>();
                }
                
                course = new Course(rset.getString(1), rset.getString(2), rset.getString(3), rset.getString(4), rset.getString(5));
                clist.add(course);
            }
            
            rset.close();
            stmt.close();
        } catch ( SQLException e ) {
            System.out.println(e.getMessage());
        }
        return clist;
    }

    @Override
    public Course getCourse(String cno) {
        Course course = null;
        PreparedStatement pstmt = null;
        ResultSet rset = null;
        String query = "SELECT * FROM course WHERE cno=?";
        
        try {
            pstmt = con.prepareStatement(query);
            pstmt.setString(1, cno);
            
            rset = pstmt.executeQuery();
            
            if( rset.next() ) {
                course = new Course(rset.getString(1), rset.getString(2), rset.getString(3), rset.getString(4), rset.getString(5));
            }
            
            rset.close();
            pstmt.close();
        } catch ( SQLException e ) {
            System.out.println(e.getMessage());
        }
        return course;
    }
    
    @Override
    public List<Course> selectCourse(String str) {
        List<Course> clist = null;
        Course course = null;
        PreparedStatement pstmt = null;
        ResultSet rset = null;
        String query = "SELECT * FROM course where cname LIKE

?
";
        
        try {
            pstmt = con.prepareStatement(query);
            pstmt.setString(1,

“%”+str+”%”
);
            
            rset = pstmt.executeQuery();
            
            while( rset.next() ) {
                if( clist==null ) {
                    clist = new ArrayList<Course>();
                }
                course = new Course(rset.getString(1), rset.getString(2), rset.getString(3), rset.getString(4), rset.getString(5));
                clist.add(course);
            }
            
            rset.close();
            pstmt.close();
        } catch ( SQLException e ) {
            System.out.println(e.getMessage());
        }
        
        return clist;
    }

    @Override
    public boolean insertCourse(Course course) {
        int TF = 0;
        PreparedStatement pstmt = null;
        String query = "INSERT INTO course VALUES (?, ?, ?, ?, ?)";
        
        try {
            pstmt = con.prepareStatement(query);
            pstmt.setString(1, course.getCno());
            pstmt.setString(2, course.getCname());
            pstmt.setString(3, course.getCredit());
            pstmt.setString(4, course.getDept());
            pstmt.setString(5, course.getPrname());
            
            TF = pstmt.executeUpdate();
            
            pstmt.close();
        } catch ( SQLException e ) {
            System.out.println(e.getMessage());
        }
        return TF==1 ? true : false;
    }

    @Override
    public boolean updateCourse(Course course) {
        int TF = 0;
        PreparedStatement pstmt = null;
        String query = "UPDATE course SET cname=?, credit=?, dept=?, prname=? WHERE cno=?";
        
        try {
            pstmt = con.prepareStatement(query);
            pstmt.setString(1, course.getCname());
            pstmt.setString(2, course.getCredit());
            pstmt.setString(3, course.getDept());
            pstmt.setString(4, course.getPrname());
            pstmt.setString(5, course.getCno());
            
            TF = pstmt.executeUpdate();
            
            pstmt.close();
        } catch ( SQLException e ) { 
            System.out.println(e.getMessage());
        }
        return TF == 1 ? true : false;
    }

    @Override
    public boolean deleteCourse(String cno) {
        int TF = 0;
        PreparedStatement pstmt = null;
        String query = "DELETE FROM course WHERE cno = ?";
        
        try {
            pstmt = con.prepareStatement(query);
            pstmt.setString(1, cno);
            
            TF = pstmt.executeUpdate();
            
            pstmt.close();
        } catch ( SQLException e ) {
            System.out.println(e.getSQLState());
        }
        return TF == 1 ? true : false;
    }
}

이 때 PrepareStatement에서 특수문자를 사용해야 할 경우(ex. %) 바인딩할 때(setString()) 정의한다.


게시됨

카테고리

, ,

작성자

%d 블로거가 이것을 좋아합니다: