Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- ssafy
- 예외처리
- 면접을 위한 CS 전공지식 노트
- 삼성청년SW아카데미
- 기초프로그래밍
- CS 기초
- CS 기초지식
- 상속
- 부스트코스
- edwith
- Java Programming
- ERD
- 객체지향
- 이진법
- w3schools
- Computer Science
- 모두를 위한 컴퓨터 과학(CS50)
- CS50
- 모두를 위한 컴퓨터 과학
- SSAFY 9기
- SW
- WebProgramming
- Compute Science
- 데이터베이스 모델링
- 알고리즘
- java
- exception
- CS기초지식
- 관계형 데이터베이스
- til
Archives
- Today
- Total
Joslynn의 하루
MSA Full-Stack 개발자 양성 과정 -29일차 노트 필기_ 게시판 만들기 실습(오류코드 정리) _220831 본문
MSA Full-Stack 개발자 양성과정/데이터베이스(Oracle)
MSA Full-Stack 개발자 양성 과정 -29일차 노트 필기_ 게시판 만들기 실습(오류코드 정리) _220831
Joslynn 2022. 9. 1. 02:38게시판 만들기 실습
**오류 정리하기
작성 코드)
Class BoardDAO{
public BoardDTO replySelectByParentNo(int boardNo) throws SQLException {
Connection con = null;
PreparedStatement ps = null;
ResultSet rs = null;
String sql = proFile.getProperty("reply.selectByboardNo");
BoardDTO board = this.boardSelectByNo(boardNo);
List<ReplyDTO> list = new ArrayList<ReplyDTO>();
try {
con = DbUtil.getConnection();
ps = con.prepareStatement(sql);
ps.setInt(1, boardNo);
rs = ps.executeQuery();
while(rs.next()) {
list.add(new ReplyDTO(rs.getInt(1), rs.getString(2), rs.getInt(3),
rs.getString(4)));
}
board.setRepliesList(list);
} finally {
DbUtil.dbClose(con, ps, rs);
}
return board;
}
}
수정 코드)
Class BoardDAO{
/**
* 게시글번호로 댓글 조회하기
* 같은 connection을 유지해야 중간에 해당 게시글 삭제 등의 변화가 있어도
현재 세션의 댓글 조회에 오류가 일어나지 않음;
* */
@Override
public BoardDTO replySelectByParentNo(int boardNo) throws SQLException {
Connection con = null;
PreparedStatement ps = null;
ResultSet rs = null;
String sql = proFile.getProperty("board.selectByNo");
List<ReplyDTO> list = new ArrayList<ReplyDTO>();
BoardDTO board = null;
try {
con = DbUtil.getConnection();
ps = con.prepareStatement(sql);
ps.setInt(1, boardNo);
rs = ps.executeQuery();
if (rs.next()) {
board = new BoardDTO(rs.getInt(1), rs.getString(2), rs.getString(3),
rs.getString(4), rs.getString(5));
list = this.replyselect(con, boardNo);
board.setRepliesList(list);
}
} finally {
DbUtil.dbClose(con, ps, rs);
}
return board;
}
public List<ReplyDTO> replyselect(Connection con, int boardNo) throws SQLException {
// 같은 Connection 유지
PreparedStatement ps = null;
ResultSet rs = null;
String sql = proFile.getProperty("reply.selectByboardNo");
List<ReplyDTO> list = new ArrayList<ReplyDTO>();
ps = con.prepareStatement(sql);
ps.setInt(1, boardNo);
rs = ps.executeQuery();
while(rs.next()) {
list.add(new ReplyDTO(rs.getInt(1), rs.getString(2), rs.getInt(3),
rs.getString(4)));
}
return list;
}
}
수정한 이유
: 게시글 번호를 통해 해당 게시글을 검색하는 기능과 게시글에 달린 댓글을 조회하는 기능이 같은 Connection을 유지해야 하기 때문이다.
: 같은 Connection이 유지되지 않을 경우, 실시간으로 유저들이 이용하는 인터넷 공간에서 해당 게시글을 검색한 후, 댓글 조회를 하는 짧은 순간동안 글이 삭제될 수도 있다. 이럴 경우, 같은 Connection을 유지하고 있지 않아 에러가 발생할 수 있다.
'MSA Full-Stack 개발자 양성과정 > 데이터베이스(Oracle)' 카테고리의 다른 글
Comments