위로
아래
조회수 증가
게시글을 클릭해 게시글 보기를 진행할 때마다 readcount 데이터 값을 1씩 올리려고 한다.
게시글을 불러올 때 이루어져야 하는 작업이니, BoardDAO 중에서 getArticle 메소드를 확인해보자.
public BoardDTO getArticle(int bno) {
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
int r = 0;
BoardDTO dto = new BoardDTO();
try {
String sql = "SELECT bno, bref, bstep, blevel, readcount, "
+ "subject, content, writer, regdate, ip, passwd "
+ "FROM board WHERE bno = ?";
conn = DBConnectionManager.getInstance().getConnection();
pstmt = conn.prepareStatement(sql);
pstmt.setInt(1, bno);
rs = pstmt.executeQuery();
if(rs.next()) {
dto.setBno(rs.getInt("bno"));
dto.setBref(rs.getInt("bref"));
dto.setBstep(rs.getInt("bstep"));
dto.setBlevel(rs.getInt("blevel"));
dto.setReadcount(rs.getInt("readcount"));
dto.setSubject(rs.getString("subject"));
dto.setWriter(rs.getString("writer"));
dto.setContent(rs.getString("content"));
dto.setRegdate(rs.getString("regdate"));
dto.setIp(rs.getString("ip"));
dto.setPasswd(rs.getString("passwd"));
}
// 여기
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
if(conn != null) conn.close();
if(pstmt != null) pstmt.close();
if(rs != null) rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
return dto;
}
}
try 문 안에서 게시글을 모두 불러온 후, catch로 넘어가기 전에 들어가는 것이 가장 이상적일 것 같다.
데이터베이스의 데이터를 직접 바꿔야 하므로 SQL문 중 UPDATE를 이용한다.
sql = "UPDATE board SET readcount=readcount+1 WHERE bno =?";
이를 실행하면 다음과 같다.
sql = "UPDATE board SET readcount=readcount+1 WHERE bno =?";
pstmt = conn.prepareStatement(sql);
pstmt.setInt(1, bno);
r = pstmt.executeUpdate();
오류 방지
오류를 방지하기 위해,
위의 sql문은 bno 값이 있을 때에만 진행되도록 처리하고,
한 메소드에서 두 번의 쿼리문 작업을 처리하고 있으니, 먼저 사용한 pstmt와 rs는 초기화해준다.
pstmt.close();
rs.close();
if(dto.getBno()!=0 && dto!=null) {
sql = "UPDATE board SET readcount=readcount+1 "
+ "WHERE bno =?";
pstmt = conn.prepareStatement(sql);
pstmt.setInt(1, bno);
r = pstmt.executeUpdate();
}
이제 조회수가 늘어나는 모습을 확인할 수 있다.
전체 코드
더보기
public BoardDTO getArticle(int bno) {
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
int r = 0;
BoardDTO dto = new BoardDTO();
try {
String sql = "SELECT bno, bref, bstep, blevel, readcount, "
+ "subject, content, writer, regdate, ip, passwd "
+ "FROM board WHERE bno = ?";
conn = DBConnectionManager.getInstance().getConnection();
pstmt = conn.prepareStatement(sql);
pstmt.setInt(1, bno);
rs = pstmt.executeQuery();
if(rs.next()) {
dto.setBno(rs.getInt("bno"));
dto.setBref(rs.getInt("bref"));
dto.setBstep(rs.getInt("bstep"));
dto.setBlevel(rs.getInt("blevel"));
dto.setReadcount(rs.getInt("readcount"));
dto.setSubject(rs.getString("subject"));
dto.setWriter(rs.getString("writer"));
dto.setContent(rs.getString("content"));
dto.setRegdate(rs.getString("regdate"));
dto.setIp(rs.getString("ip"));
dto.setPasswd(rs.getString("passwd"));
}
pstmt.close();
rs.close();
if(dto.getBno()!=0 && dto!=null) {
sql = "UPDATE board SET readcount=readcount+1 "
+ "WHERE bno =?";
pstmt = conn.prepareStatement(sql);
pstmt.setInt(1, bno);
r = pstmt.executeUpdate();
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
if(conn != null) conn.close();
if(pstmt != null) pstmt.close();
if(rs != null) rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
return dto;
}