2024-01-08 (21일차) - sts4 에러, Map, JDBC 수정기능

·2024년 1월 8일

📅2024-01-08, 21일차

👩‍💻🏠TODO

벨로그정리
오늘 수정기능 못한게 속상했다 집에서 혼자 다시 해보자
강의영상 복습
프로그래머스 sql (시간 없어도 단 10분이라도 해)

멘탈 날라가고 정신 못차리는중.....🤯

sts4 github import 에러 해결 썰 (멘붕)

  • 지난주 금요일, 집에서 노트북에 sts4 다운 -> 환경세팅 후 학원에서 푸쉬 했던 커밋을 클론했더니.. src 폴더가 사라지고 src 하위 폴더들만 있는 기이한(?) 현상으로 빨간줄 테러를 당하는 참사가 생겼다. 몇시간동안 구글링하고 찾은 방법은..

    1. package explorer에서 프로젝트 마우스 우클릭 -> build path -> configure build path 클릭
    2. library가 jre로 설정 되어있길래, jdk 17로 선택하고 apply하니 사라진 src 폴더가 생기면서 에러가 모두 사라짐.
  • 그런데 또 다른 에러가 발생.. 바로 임포트해서 불러온 프로젝트를 package explorere에서 delete하고 또 다시 불러오기 할때 sts4가 무반응이라는 것. 에러 메세지도 안뜨고, 그냥 불러와지지가 않더라.. sts4이랑 씨름하다 밤 12시반이 되버렸고. 4시간을 날린 것 같아 부글부글.. 나의 인내심의 한계는 여기까지 였던 듯.. 조금 쉬면서 진정을 하고. 다른 공부를 마저하고 자버렸다. 다음날 구글링 후 해결!

    1. .project 이야기가 나오길래 깃헙 레파지토리 확인 해보니 정말 .project 파일이 깃허브에 같이 푸쉬가 됬네?
    2. 첨에 gitinit -> gitignore 할때 내가 .project를 .projects라고 오타를 내는 바람에 그런 것 같더라..
    3. 구글링에선 .project 파일을 삭제하면 된다고했다. 그래서 그냥 프로젝트 폴더에서 과감하게 삭제!
    4. 삭제 후 불러오기 하니 해결! 그리고 gitignore로 .project로 수정함.
  • ...된 줄 알았지........................... 오늘 난 또 sts4과 깃헙때문에 2시간을 날렸다. 이번엔 삭제했던 .project가 화근이었다. 학원에서도 .project 파일 삭제하고 푸쉬했는데 최근 커밋에는 당연 .project가 없겠지... 그걸 그대로 집에와서 또 import clone 하려니 no project 라며 clone이 안되더라....(띠로리) 진짜 정말적이었다.. .project 파일을 삭제 한게 후회스럽더라.. 근데 이것도 결국은 해결했다 2시간만에..

    1. git hub clone by url을 하면 no project 어쩌구 할거다.
    2. 그럴땐 그냥 무시하고, 내가 clone 하려고 했던 폴더 경로를 직접 들어가보면, clone 시도했던 프로젝트가 고스란히 들어와있다!
    3. 그럼 sts4에서 open projects from file system해서 불러오면 끝이다!
  • 그냥 이 시간도 모두 깃헙과 이클립스/sts4 공부한거라고 생각하려고 한다. 좋게생각하면 이런일이 지금 발생한게 어디야~ 진짜 포트폴리오랑 개인프로젝트 할때 이런일이 생겼다고 해봐. 아니 나중에 회사에서 이런 실수해서 혼자 뻘짓 하고 있다고 생각해봐.... 아찔하다. 이것도 배움이라고 생각하자! 깃헙 정말 너어..... 🔫


내 생각의 흐름

1. article list시 select된 결과가 콘솔에 보일 수 있도록

  • article write 할때 insertTest 복붙한거랑 비슷할거 같음
    붙여넣기하는 시점을 잘 생각해봐야할 것 같음
  • article list 커맨드 받고 바로 실행 할 수 있게 붙여넣기했더니
    되는거 같은데, 이게 제대로 된게 맞나 모르겠네
  • List< Article> articles = new ArrayList<>(); 를 메서드 밖으로 꺼내서 전역변수로 사용함
  • 아니, article write 할때는 필요없어. db에 저장되니까
  • article list 할때는 필요해. 보여줘야하니까.

2. 게시물 수정 기능 구현 -> JDBC활용

  • 기존 modify 기능과 동일하게 구현
  • 근데 articles는 필요한지 안한지 판단이 아직.. 더 생각해보기
    JDBC select 기능과 insert 기능 둘다 필요 할 것 같음..
    select기능 먼저 필요하지않을까..
    select 기능과 insert기능을 둘다 넣었더니
    에러 폭탄이었다
    생각해보니 select는 필요없을 것 같아서 insert만
    article write처럼 사용했다.
    수정은 되는데, 수정 후 목록보기하니
    여러번 반복하면서 콘솔에 나옴....
    그럼 출력문을 반복문에서 빼면 될까?
    아니.... 일단 article list는 건드리지 않고
    article modify에서 문제를 더 찾아보기로..
    article modify에서 출력을 하는 로직을 찾아서 지워보자
    article list로 글 3개를 작성 하고 modify한 다음 list를 다시 출력했을때
    3 (수정 후)
    2 (수정 후)
    1 (수정 후)
    3 (수정 전)
    2 (수정 전)
    1 (수정 전)
    이런식으로 나오는거 보니
    수정전 꺼 따로 저장, 수정 후 꺼 따로 저장 이런식으로
    여러번 저장이 되는 것 같다
    그럼 어디에서 저장이 두번씩 되는걸까????
  • while문에 rs가 저장을 하고 있어서
    어래이 리스트를 static 붙여서 전역에 넣었더니 재활용해서 그런 듯하다. 일회용으로 사용하기위해 전역에서 지우고 지역으로 옮겨주었더니 반복적으로 덧붙여서 리스트가 덧붙여지는것은 해결 됐다.

수정 시 제목만 수정 하고싶거나 내용만 수정 하고싶을 때의 로직

String sql = "UPDATE article ";
sql += "SET updateDate = NOW()";
if (title.length() > 0) {
	sql += ", title = '" + newTitle + "'";
}
if (body.length() >0) {
	sql += ", `body`= '" + newBody + "' ";
}
sql += " WHERE id = " + id + ";";

왜 이런 로직을 짰는지 처음엔 이해가가지 않았다.
article 수정 시,
제목만 수정 하고 싶거나, 내용만 수정 하고 싶을 때가 있을 거다.
수정할 제목만 새로 입력하고, 내용 입력 시 아무것도 적지 않고 엔터를 쳤을 때는
blank가 그대로 내용으로 데이터베이스에 저장이 되는 것이 문제였던 것.
새제목만 적고 내용 입력 시 엔터만 쳤을 때 아무 것도 입력 되지 않게 설정 한거였다.
내용의 길이가 0보다 클 경우 (내용이 실제로 입력 됐다는 뜻) 저장하고,
내용의 길이가 0인 경우 (내용이 아무 것도 입력 되지 않았을 때는) 저장하지 말라는 뜻!

또, 콤마를 쿼리 뒤가 아닌 앞에 찍는 이유는,
실제로 내용을 입력하지 않았을때 WHERE id 앞에 콤마가 붙어버려 syntax error 생기는 것을 방지하기 위해서!

3. 게시물 상세보기 기능 구현

  • modify 기능 그대로 가져와서 출력문만 상세정보 나올 수 있도록 수정하면 될 듯 하다.

MAP 특징

"요소의 저장 순서를 유지하지 않습니다." (맞다!!!까먹었었던 부분이었는데!)

  • 근데 왜 순서가 없어?
  • 인덱스번호에 의존하지 않고 아니라 key에 의존해서 값을 가져오니까
  • 근데 입력 순서대로 가지고 오고 싶으면 어떡해?
  • LinkedHashMap이랑 TreeMap 사용하면 됨!
  • LinkedHashMap : 입력된 순서대로
  • TreeMap : sort순으로

제네릭은 <키, 밸류> 두개 넣어야함

값 얻으려면 .get(키)

containsKey -> 이거 contains랑 비슷하네


프로그래머스 SQL 문제

USER_INFO 테이블에서 2021년에 가입한 회원 중 나이가 20세 이상 29세 이하인 회원이 몇 명인지 출력하는 SQL문을 작성해주세요.

SELECT COUNT(USER_ID) AS `USERS`
FROM USER_INFO
WHERE DATE_FORMAT(JOINED,'%Y') = '2021' AND
AGE BETWEEN 20 AND 29

나는 자꾸 9명이 나온다..
실제 정답은 3명으로 나와야한다고 한다..
해결방법을 찾아봐야겠다.

잘 하고싶다

4시간 * 평일 5일

  • (평일) 20시간

5시간 * 주말 2일

  • (주말) 10시간
  • 주 30시간
  • 한달 120시간
  • 6개월 720시간

아 진짜 더 열심히 해야한다.... 다 피가 되고 살이 되는 과정이다..

생각과 의심을 해야함
다양한 방법을 생각하고 의심해보려면
문법이해가 더 필요하다!!

profile
hello world

0개의 댓글