관리 메뉴

LIFE & IT

게시판 DAO(Data Access Object) 부분 본문

웹 프로그래밍/JSP & Servlet

게시판 DAO(Data Access Object) 부분

프린이! 2020. 1. 12. 23:19

간단한 게시판 DAO 부분입니다.

효과적인 DAO 작성 법은 아니고 초보적 수준의 DAO 코드입니다.

차후 효과적인 방법으로 변경할 예정.

현재 코드는 JSP 게시판 포트폴리오에 적용됨.

 

 

1. 현재 시간 구하는 함수

// 현재 시간 구하는 함수
	public String getDate() {
		String SQL = "SELECT NOW()";
		
		try {
			PreparedStatement pstmt = conn.prepareStatement(SQL);
			rs = pstmt.executeQuery();
			if(rs.next()) {
				return rs.getString(1);
			}
			
			
		} catch (Exception e) {
			e.printStackTrace();
		}
		return "";
	}

 

 

 

2. 게시글 번호 구하는 함수 

- 게시글 작성 함수(3번)에 getNext() 함수를 이용해 게시글 번호(bbsID)를 넣어주기 위한 함수.

// 게시글 번호 구하는 함수
	public int getNext() {
		String SQL = "SELECT bbsID FROM BBS ORDER BY bbsID DESC";
		
		try {
			PreparedStatement pstmt = conn.prepareStatement(SQL);
			rs = pstmt.executeQuery();
			if(rs.next()) {
				return rs.getInt(1) + 1; //다음 게시물
			}
			return 1; // 첫 번째 게시물
			
		} catch (Exception e) {
			e.printStackTrace();
		}
		return -1; // 데이터 베이스 오류
	}

- return 1 = 첫 번째 게시물을 말한다.

- return -1 = 데이터 베이스 오류를 말한다.

- return rs.getInt(1) + 1 =  rs.next() 결과 값이 1개 이상이면 결과 값이 +1 을 더해서 다음 게시글 번호를 만든다.

 

▷ 주의 : 검색 건 수가 100만건 이상이면 정렬로 인한 문제가 발생할 수 있기 때문에 getNext()자체를 다른 함수에 넣어사용하는 방법은 좋은 방법이 아닐 것으로 생각된다. 게시글 작성 함수(3번)에 getNext() 함수 대신 데이터베이스의 시퀀스인 nextval 을 사용하는 것이 좋을 것 같다.

 

 

3. 게시글 작성 함수

// 게시글 작성 함수
	public int write(String bbsTitle, String userID, String bbsContent) {
			String SQL = "INSERT INTO BBS VALUES (?, ?, ?, ?, ?, ?)";
		
		try {
			PreparedStatement pstmt = conn.prepareStatement(SQL);
			pstmt.setInt(1, getNext());
			pstmt.setString(2, bbsTitle);
			pstmt.setString(3, userID);
			pstmt.setString(4, getDate());
			pstmt.setString(5, bbsContent);
			pstmt.setInt(6, 1); // 게시글 삭제된 여부 <0:삭제o , 1:삭제x>
			
			return pstmt.executeUpdate();
			
		} catch (Exception e) {
			e.printStackTrace();
		}
		return -1; // 데이터 베이스 오류	
	}

 

 

※ 시퀀스 참고: https://mine-it-record.tistory.com/61, https://mine-it-record.tistory.com/62