웹 프로그래밍/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