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 |
Tags
- 조회수기능
- sqldeveloper
- 라디오박스값 #Radiobox value #크롭콘솔
- 조회수
- allchecked #unchecked #체크박스 #체크박스선택삭제 #체크박스모두선택
- SQL
- 게시판컨트롤러
- 환경설정
- 코드공부
- maven연결
- JSP
- UTF-8
- Java
- 디벨로퍼
- 디벨로퍼한글깨짐
- spring환경설정
- 로그인코드
- 코드정리
- 게시판조회수기능
- ORA-01745
- 게시판만들기
- maVen
- 게시판코드
- java로그인
- 로그인기능
- 호스트/바인드 변수명이 부적합합니다
- 한글깨짐
- Spring
Archives
- Today
- Total
개발자가 되고 싶은 조안나
[Java] 게시판 만들기 (조회수기능) 본문
read_cntVO를 만들어 준다.
처음에 조금 헤맸던게 조회수 VO 하나를 여러 게시판이 나눠 쓸 수 있는 줄 알았는데
한 게시판에 하나씩 만들어 줘야한다.
package read_cnt;
import cmn.DTO;
public class ReadCntVO extends DTO{
/*ip주소*/
private String ip;
/*클릭한 게시글 번호*/
private String seq;
/*등록 날짜*/
private String red_dt;
public ReadCntVO(){}
}
이 후에는 기존에 만들어두었던 reviewDao에 새로 쿼리를 추가
//조회수 증가
public int do_updateReadCnt(DTO dto) {
ReviewVO vo=(ReviewVO)dto;
int flag=0;
Connection conn = null;
PreparedStatement pstmt = null;
try{
StringBuilder sb = new StringBuilder();
sb.append(" update board2 \n");
sb.append(" set read_cnt = (SELECT NVL(read_cnt,0)+1 FROM board2 WHERE seq=?)\n");
sb.append(" WHERE seq=? \n");
conn= connectionMaker.getConnection();
LOG.debug("1.===========================");
LOG.debug("1.query\n"+sb.toString());
LOG.debug("1.===========================");
pstmt = conn.prepareStatement(sb.toString());
pstmt.setString(1, vo.getSeq());
pstmt.setString(2, vo.getSeq());
LOG.debug("2.===========================");
LOG.debug("2.param:"+vo);
LOG.debug("2.===========================");
flag=pstmt.executeUpdate();
LOG.debug("3.===========================");
LOG.debug("3.flag:"+flag);
LOG.debug("3.===========================");
}catch(SQLException s){
LOG.debug("==========================");
LOG.debug("SQLException="+s.toString());
LOG.debug("==========================");
}finally{
JDBCReturnReso.close(pstmt);
JDBCReturnReso.close(conn);
}
return flag;
}
//클릭한 횟수
public int do_retSelectCnt(DTO dto){
ReadCntVO2 vo =(ReadCntVO2) dto;
int flag = 0;
Connection conn = null;
PreparedStatement pstmt= null;
ResultSet rs = null;
try{
StringBuilder sb=new StringBuilder();
sb.append(" SELECT COUNT(*) cnt \n");
sb.append(" FROM read_cnt2 \n");
sb.append(" WHERE seq2 = ? \n");
conn = connectionMaker.getConnection();
LOG.debug("1.============================");
LOG.debug("1.query: \n"+sb.toString());
LOG.debug("1.============================");
pstmt = conn.prepareStatement(sb.toString());
//query param
pstmt.setString(1, vo.getSeq());
LOG.debug("2.============================");
LOG.debug("2.param seq="+vo.getSeq());
LOG.debug("2.============================");
rs = pstmt.executeQuery();
if(rs.next()){
flag = rs.getInt("cnt");
}
LOG.debug("3.============================");
LOG.debug("3.flag="+flag);
LOG.debug("3.============================");
}catch(SQLException e){
LOG.debug("===================");
LOG.debug("SQLException="+e.getMessage());
LOG.debug("===================");
}finally{
JDBCReturnReso.close(rs);
JDBCReturnReso.close(pstmt);
JDBCReturnReso.close(conn);
}
return flag;
}
//ip등록
public int do_retInsert(DTO dto) {
ReadCntVO2 vo =(ReadCntVO2)dto;
int flag=0;
Connection conn = null;
PreparedStatement pstmt = null;
try{
StringBuilder sb = new StringBuilder();
sb.append(" INSERT INTO read_cnt2 ( \n");
sb.append(" seq2, \n");
sb.append(" ip, \n");
sb.append(" red_dt \n");
sb.append(" ) VALUES ( \n");
sb.append(" ?, \n");
sb.append(" ?, \n");
sb.append(" SYSDATE \n");
sb.append(" ) \n");
//오류나면 꺼낼 수 있도록 로그 만들기
LOG.debug("1.=========================");
LOG.debug("1.query\n:"+sb.toString());
LOG.debug("1.=========================");
//커넥션 만들기
conn = connectionMaker.getConnection();
pstmt= conn.prepareStatement(sb.toString());
//파람 3개설정(물음표 2개임)
pstmt.setString(1, vo.getSeq());
pstmt.setString(2, vo.getIp());
LOG.debug("2.=========================");
LOG.debug("2.param\n:"+vo.toString());
LOG.debug("2.=========================");
//쿼리날리기
flag = pstmt.executeUpdate();
LOG.debug("3.=========================");
LOG.debug("3.flag\n:"+flag);
LOG.debug("3.=========================");
}catch(SQLException e){
LOG.debug("=========================");
LOG.debug("SQLException"+e.toString());
LOG.debug("=========================");
}finally{
JDBCReturnReso.close(pstmt);
JDBCReturnReso.close(conn);
}
return flag;
}
이렇게 만들고 나서도 조금 문제가 있었는데.
바로 게시물을 삭제하고 나면 ORA-02292: 무결성 제약조건
'자식레코드가 발견되었습니다'라는 알람이 뜨는 것이다.
아까는 부모가 없다고 그러고.. 이번에는 자식이 발견되었다니
FK로 연결된 자식테이블에 데이터가 존재하기 때문이라는데
무슨 소리인고 하니. 게시판에 있는 게시글(부모)은 지워졌는데
조회수(자식) 정보는 남아있어서 그렇다고 한다.
이런 경우에는 빌더에 들어가서 외래키->종속 삭제로 바꿔줘야한다.
부모 죽으면 자식도 같이 사라지도록 casecade로 바꿔주면 끝!
정처기 시험공부할 때 casecade 뜻만 외웠지 사실
제대로 이해 못했었는데 이런데 필요한거였구나 하고
퍼즐 맞춰지는 기분이 들어서 좋았다.
'코드 정리 ' 카테고리의 다른 글
체크박스 (All checked / unchecked) (0) | 2020.04.20 |
---|---|
[ORA-01745] 호스트/바인드 변수명이 부적합합니다 (0) | 2019.08.23 |
review test (0) | 2019.08.17 |
[JAVA] 게시판 만들기 (Ctrl) (0) | 2019.08.16 |
[JAVA] 게시판 만들기 (VO/DAO) (0) | 2019.08.14 |
Comments