Notice
Recent Posts
Recent Comments
Link
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Tags
more
Archives
Today
Total
관리 메뉴

개발 일기

JAVA 게시판 만들기 2 탄 (feat. DAO 클래스 만들기 (CRUD 구현하기) ) 본문

Project 1. 게시판 만들기

JAVA 게시판 만들기 2 탄 (feat. DAO 클래스 만들기 (CRUD 구현하기) )

개발 일기 2021. 8. 20. 23:06

안녕하세요.

 

오늘은 게시판 업무에 많은 비중을 차지하는 DAO 클래스를 만들고,

가장 기본이 되는 CRUD (생성, 조회, 수정, 삭제)의 기능 메소드 코드를 작성해보겠습니다.

 

 

1. Create (게시물 생성 메소드)

public int addQna(Qna qna) throws Exception {
		Connection conn = null;
		PreparedStatement pstmt = null;
		int rowCount = 0;
		try {
			conn = dataSource.getConnection();

			pstmt = conn.prepareStatement(QnaSql.QNA_CREATE);
			pstmt.setInt(1, qna.getMemberNo());
			pstmt.setString(2, qna.getQnaTitle());
			pstmt.setString(3, qna.getQnaContent());
			pstmt.setInt(4, qna.getQnaVisible());
			pstmt.setString(5, qna.getQnaFile());

			rowCount = pstmt.executeUpdate();

		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			if (pstmt != null) pstmt.close();
			if (conn != null) conn.close();
		}
		return rowCount;
	}
    
    //사용한 SQL문
    //insert into QNA(QNA_NO,MEMBER_NO,QNA_TITLE,QNA_CONTENT,QNA_REG_DATE,QNA_VISIBLE,QNA_FILE,QNA_VIEWS) VALUES(QNA_SEQ.nextval,?,?,?,sysdate,?,?,0)

 - DB 서버와 연결하는 작업은 DataSource를 상속받은 뒤 jdbc.properties를 두고 진행을 했습니다.

 - Qna 클래스의 qna객체를 인자로 가지는 addQna 메소드를 생성한 뒤 SQL문에 맞춰 pstmt를 셋팅합니다.

 

 

2. Read (게시물 조회 메소드)

public Qna getQnaByNo(int qnaNo) throws Exception {
		Connection conn = null;
		PreparedStatement pstmt = null, pstmt2 = null;
		ResultSet rs = null, rs2 = null;
		Qna qna = null;

		try {
			conn = dataSource.getConnection();
			StringBuffer sql = new StringBuffer(300);
			sql.append("SELECT ");
			sql.append("QNA_NO, MEMBER_NO, QNA_TITLE, QNA_CONTENT, ");
			sql.append("QNA_REG_DATE, QNA_VISIBLE, ");
			sql.append("QNA_FILE, QNA_VIEWS ");
			sql.append("FROM QNA ");
			sql.append("WHERE QNA_NO = ? ");
			pstmt = conn.prepareStatement(sql.toString());
			pstmt.setInt(1, qnaNo);
			rs = pstmt.executeQuery();
			if (rs.next()) {
				qna = new Qna();
				qna.setQnaNo(rs.getInt(1));
				qna.setMemberNo(rs.getInt(2));
				qna.setQnaTitle(rs.getString(3));
				qna.setQnaContent(rs.getString(4));
				qna.setQnaRegDate(rs.getDate(5));
				qna.setQnaVisible(rs.getInt(6));
				qna.setQnaFile(rs.getString(7));
				qna.setQnaViews(rs.getInt(8));
				
				sql.delete(0, sql.length());

				sql.append("SELECT REPLY_NO, REPLY_CONTENT, ").append("	   QNA_NO, MEMBER_NO ")
						.append("FROM REPLY ").append("WHERE QNA_NO = ?");
				pstmt2 = conn.prepareStatement(sql.toString());
				pstmt2.setInt(1, qnaNo);
				rs2 = pstmt2.executeQuery();
				ArrayList<Reply> replys = new ArrayList<Reply>();
				while (rs2.next()) {
					Reply reply = new Reply();
					reply.setReplyNo(rs2.getInt(1));
					reply.setReplyContent(rs2.getString(2));
					reply.setQnaNo(rs2.getInt(3));
					reply.setMemberNo(rs2.getInt(4));
					replys.add(reply);
				}
				qna.setReplys(replys);

			}
		} catch (Exception ex) {
			ex.printStackTrace();
		} finally {
			if (rs != null) rs.close();
			if (rs2 != null) rs2.close();
			if (pstmt != null) pstmt.close();
			if (pstmt2 != null) pstmt2.close();
			if (conn != null) conn.close();
		}
		return qna;
	}

 - Qna 객체를 반환하며 int qnaNo를 인자로 가지는 게시물 상세 조회 메소드 getQnaByNo를 생성했습니다.

 - SQL 문을 StringBuffer를 이용해보았습니다.

 - ResultSet을 통해 컬럼별로 조회할 수 있도록 데이터를 가져오는 작업을 진행했습니다.

 - 화면 내 Reply(댓글)이 존재하게 구성을 할 예정이라 Qna의 상세 내용 출력 후 Reply 내용도 출력합니다.

 

 

3. Update (게시물 수정 메소드)

public void modifyQna(Qna qna) throws Exception{
		Connection conn = null;
		PreparedStatement pstmt = null;
		try {
			conn = dataSource.getConnection();
			pstmt = conn.prepareStatement(QnaSql.QNA_UPDATE);
			pstmt.setString(1, qna.getQnaTitle());
			pstmt.setInt(2, qna.getQnaVisible());
			pstmt.setString(3, qna.getQnaFile());
			pstmt.setString(4, qna.getQnaContent());
			pstmt.setInt(5, qna.getQnaNo());
			pstmt.setInt(6, qna.getMemberNo());
			pstmt.executeUpdate();

		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			if (pstmt != null) pstmt.close();
			if (conn != null) conn.close();
		}
				
	}
    
    //사용한 SQL문
    //UPDATE QNA SET qna_title = ?, qna_visible = ?, qna_file = ?,  qna_content = ? where QNA_NO = ? and MEMBER_NO = ?

 - Qna 객체를 인자로 가지는 Qna 수정 메소드 modifyQna를 생성했습니다.

 - SQL 문에 전달받는 Qna 객체의 값으로 수정되어야 할 부분들을 설정합니다.

 - Qna 객체의 QNA_NO와 MEMBER_NO 컬럼의 값으로 일치하는 게시물을 찾아 업데이트 합니다.

 

 

4. Delete (게시물 삭제 메소드)

public void removeQna(int qnaNo) throws Exception {
		Connection conn = null;
		PreparedStatement pstmt = null;
		try {
			conn = dataSource.getConnection();
			pstmt = conn.prepareStatement(QnaSql.QNA_DELETE);
			pstmt.setInt(1, qnaNo);
			pstmt.executeUpdate();

		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			if (pstmt != null) pstmt.close();
			if (conn != null) conn.close();
		}
	}
    
   
   //사용한 SQL문
   //DELETE FROM QNA WHERE QNA_NO = ?

 - int qnaNo를 인자로 가지는 removeQna 메소드를 생성합니다.

 - DELETE SQL문을 사용하여 인자로 받은 qnaNo를 통해 QNA_NO 값을 지정한 뒤 데이터를 삭제합니다.

 

 

오늘은 현재 진행하고 있는 프로젝트의 게시판(QNA)파트의 DAO 클래스의 CRUD를 메소드로 구현해보았습니다.

감사합니다.

Comments