ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Thu/Jan/30[Java] day21. SQL-HTML 연습 (게시판 답글 만들기)
    Study/2020 국비교육_Java 2020. 1. 30. 09:12

    Thu/Jan/30

    [Java] day21.

    SQL-HTML 연습 (게시판 답글 만들기)



    실습_게시판 답글 달기

     

    * 새로운 글쓰기 query

    Select Max(uid)+1 From board;

    insert into board (name, title, message, email, mkdate, hit, pass, depth, uid) values (name, title, message, email, now(), hit, pass, depth, uid);

     

    ※ eclipse에서 바로 mySQL 사용하기

    Driver Definition 초기 화면 - Add JAR/Zip 눌러서 드라이버 파일 추가

    초기 파일은 지우고 선택한 Driver file만 남겨야 'OK' 활성화됨

    Database / URL / User name / Password 본인거로 setting하고 Test Connection

    Connection Success >> Finish

     

    간단한 Query Test는 eclipse에서 편하게 실행할 수 있다

    선택한 영역만 실행

    SQL 명령어 실행 성공 (CREATE TABLE...)

    mySQL에서 확인

    eclipse의 Data Source Explorer를 통해 해당 database의 전체 구조를 편하게 확인 가능

    직접 data 입력 가능 / insert query 없이!

     

    ※ 게시판에서 depth field 와 uid field 가 필요한 이유

    create table board (
       idx int(11) not null auto_increment primary key,
       name varchar(10) not null,
       depth int not null default 0,
       uid int not null);

    depth == 답글 여부 field  / uid == 답글 정렬 field

    idx 가 auto_increment 설정되었기 때문에, 단순히 ORDER BY idx DESC; 로 정렬하면 답글이 맨 위로 올라오게 됨

    uid는 max(uid)+1로 idx와 함께 1씩 증가하다가, 답글이 달리게 되면 그 답글은 본글의 uid를 갖고오고, 기존 글들의 uid는 1씩 증가시켜서 정렬함

     → UPDATE Query 필요, SELECT * FROM board_table ORDER BY uid DESC; 로 정렬

     → 필요한 Queries : 새글은 SELECT - INSERT, 답글은 INSERT - UPDATE

    일반적으로 답글에는 글번호 보다는 별도의 구분 기호가 들어감  → depth field 에서 새글은 0, 답글은 1++ 을 지정해 구분

     


    [ my solution ]

    https://github.com/ezerwi/lecture0130_board_reply

     

    ezerwi/lecture0130_board_reply

    Contribute to ezerwi/lecture0130_board_reply development by creating an account on GitHub.

    github.com

     

    [수정ver2] 글목록 페이지 번호 추가

    아으 하나 뭐 더할 때마다 에러가 미친듯이 나네..ㅋ

    페이지 넘버링 하는데 피곤해서 그런지 어이없는 실수도 많고 계산도 잘 안돼서 몇시간 걸린듯ㅋㅋㅋㅋㅋㅋ

    count(*)로 글 갯수 세는 것이 맞긴하지만, 중간에 삭제한 글이 몇개 있다보니

    count(*)를 기준으로 20개씩 불러오게되면 최신 작성한 글 몇개가 나오지 않는 경우가 발생해서

    MAX(uid)로 변경해서 처리했다 (이거 찾는데 1시간..)

    20개씩 ResultSet return하는 method 만드는데

    당연히 집어넣었어야 할 DBconnect() 안집어넣어서 rs null point error 계속 나와서 또 1시간 헤메고..

    워낙 그동안 반사적으로 method를 만들었더니 넣었는지 안넣었었는지도 까먹은듯;;

     

    [문제점 발견, 수정 진행 버전]

    저녁 먹고 다시 해보면서 답글에 연속 답글을 달아보니

     답글이 여기 달렸다 저기 달렸다하는 기현상 발생..;;ㅋㅋ

    끝날 때까지 끝난게 아니다..

    uid 생성하는 method 와 depth 계산 수정,

     uid 순으로 답글 정렬 부분 수정 완료!!!!

    어우..하다보니 너무 정신없어서 제목에 아예 value 줘서 자동으로 몇번 글의 답글인지 달리게 만듦

     

    이제 글 삭제 시 uid 수정하는 부분, 글 수정 기능, 조회수 기능 추가하면 게시판 기본 기능은 모두 완성임

    근데 요즘 게시판에서 원글 삭제한다고 답글까지 모두 삭제되는 경우는 거의 없기도 하고,

    행여 필요하다고 해도 uid 설정 method 조금만 수정하면 될 거 같아서,

    삭제 버튼 누르면 '삭제된 게시글입니다' 라는 표시만 나오도록 작업할 예정!

     

    [수업시간에 끝까지 진행한 버전]

    글 수정, 글 목록 page, 조회수 등 일부 기능 생략..

    기본적인 작성/삭제 기능에 답글 달고 정렬하는 것 정도만 구현

    depth는 그냥 웹에서 바로 ++1해서 Java로 넘기는 걸로 쉽게 해결 했고,

    uid가 역시나 머리 아프게 오래 걸림, 구현은 그냥 하면 되는거 같은데 논리 짜는게 역시나 어렵다..

     

    활용한 글 :

    [강석기의 과학카페]코로나바이러스, 진화의 끝은 어디인가 https://m.news.naver.com/read.nhn?aid=0000007404&oid=584&sid1=105

     

    [강석기의 과학카페]코로나바이러스, 진화의 끝은 어디인가

    박쥐 사스-유사 코로나바이러스의 만연과 엄청난 유전적 다양성이라는 조건에서 이들이 서로 가까이 존재하면서 수시로 게놈을 재조합하는 걸 고려할 때, 미래에 (사람에 감염할) 새로운 변종이 등장할 것이라고 예상한다. -

    news.naver.com

     

    sql board table

    mysql> desc board;
    +----------+--------------+------+-----+---------+----------------+
    | Field    | Type         | Null | Key | Default | Extra          |
    +----------+--------------+------+-----+---------+----------------+
    | idx      | int(11)      | NO   | PRI | NULL    | auto_increment |
    | name     | varchar(50)  | NO   |     | NULL    |                |
    | title    | varchar(100) | YES  |     | NULL    |                |
    | contents | text         | NO   |     | NULL    |                |
    | mkdate   | datetime     | NO   |     | NULL    |                |
    | hit      | int(11)      | NO   |     | 0       |                |
    | depth    | int(11)      | NO   |     | 0       |                |
    | uid      | int(11)      | NO   |     | 0       |                |
    +----------+--------------+------+-----+---------+----------------+
    8 rows in set (0.01 sec)

    댓글

Designed by Tistory.