게시글 만들기 DB 활용 #4

Yullc·2025년 4월 2일
post-thumbnail

1. 글 유무 판단하기

글을 삭제하거나 수정할 때 글이 있는지 없는지 보고 삭제를 하던가 수정을 하잖아? 그래서 우리는 삭제, 수정 기능을 수행하기 전에 글 유무 판단을 먼저 하고 기능을 수행 할 거야.

			SecSql sql = new SecSql();
            sql.append("SELECT *");
            sql.append("FROM article");
            sql.append("WHERE id = ?;", id);

            Map<String, Object> articleMap = DBUtil.selectRow(conn, sql);

            if (articleMap.isEmpty()) {
                System.out.println(id + "번 글은 없음");
                return 0;
            }
  • select 문을 예시로 가져왔어. 보면 select 쿼리 하고, Map형태로 특정 행을 선택하여 저장하는 구문이야.

  • 그러면 articleMap에다가 db연결하는 conn이 key값이고 위에서 쿼리문 작성한 sql이 key값인거 알고있지?

  • 그래서 만약에 articleMap에 들어있는게 아무것도 없으면 입력한 id 글은 없는거야!!

2. 회원가입(아이디 생성, 중복체크)

이제 회원가입을 진행 할건데, 생각해야하는게 Id 중복금지, 비밀번호 재확인이야.
이거를 고려해서 만들어보자ㅏㅏㅏㅏㅏㅏㅏㅏㅏ악

			 if (cmd.equals("member join")) {
            String loginId = null;
            String loginPw = null;
            String loginPwConfirm = null;
            String name = null;
            System.out.println("==회원가입==");
            while (true) {
                System.out.print("로그인 아이디 : ");
                loginId = sc.nextLine().trim();
                if (loginId.length() == 0 || loginId.contains(" ")) {
                    System.out.println("아이디 똑바로 써");
                    continue;
                }

                SecSql sql = new SecSql();

                sql.append("SELECT COUNT(*) > 0");
                sql.append("FROM `member`");
                sql.append("WHERE loginId = ?;", loginId);

                boolean isLoginIdDup = DBUtil.selectRowBooleanValue(conn, sql);

                System.out.println(isLoginIdDup);

                if (isLoginIdDup) {
                    System.out.println(loginId + "은(는) 이미 사용중");
                    continue;
                }
                break;
            }
  • 먼저 회원가입부터 볼건데, 아이디를 입력 받아야겠지? 그리고 바보처럼 아이디에 아무것도 안적던가 공백이 있으면 다시 쓰라고 시킬거야.

  • 그리고 되게 골치아픈 아이디 중복 여부를 체크 할건데, 뭐 옛날에는 List돌려서 비교했지만 이제는 우리의 저장소인 member 테이블이랑 비교를 해야해.

  • 그래서 sql문으로 member table의 where문으로 loginId가 있는지 볼거야.

  • bool타입으로 isLoginIdDup변수에 우리가 적은 sql문을 줘서 DBUtil클래스에 selectRowBooleanValue이 메서드가 있거든? 그래서 얘보고 있는지 없는지 판별하게 할거야.

  • if문으로 isLoginIdDup변수가 참이면 "이미 사용중"이라는 문구를 남기고 continue하면? 아이디 중복이 안되고 사용자가 잘 알아듣겠지??

3.회원가입(비밀번호)

 				while (true) {
                System.out.print("비밀번호 : ");
                loginPw = sc.nextLine().trim();

                if (loginPw.length() == 0 || loginPw.contains(" ")) {
                    System.out.println("비번 똑바로 써");
                    continue;
                }
                boolean loginCheckPw = true;

                while (true) {
                    System.out.print("비번 확인 : ");
                    loginPwConfirm = sc.nextLine().trim();

                    if (loginPwConfirm.length() == 0 || loginPwConfirm.contains(" ")) {
                        System.out.println("비번 확인 똑바로 써");
                        continue;
                    }

                    if (loginPw.equals(loginPwConfirm) == false) {
                        System.out.println("일치하지 않아");
                        loginCheckPw = false;
                    }
                    break;
                }
                if (loginCheckPw) {
                    break;
                }
            }
            while (true) {
                System.out.print("이름 : ");
                name = sc.nextLine();

                if (name.length() == 0 || name.contains(" ")) {
                    System.out.println("이름 똑바로 써");
                    continue;
                }
                break;
            }
            SecSql sql = new SecSql();

            sql.append("INSERT INTO `member`");
            sql.append("SET regDate = NOW(),");
            sql.append("updateDate = NOW(),");
            sql.append("loginId = ?,", loginId);
            sql.append("loginPw = ?,", loginPw);
            sql.append("`name` = ?;", name);

            int id = DBUtil.insert(conn, sql);

            System.out.println(id + "번 회원이 가입됨");
        }
  • 비밀번호 체크는 시작할 때 비밀번호 체크하는 loginCheckPw변수를 bool값으로 주고 시작할거야.

  • 다음은 loginPwConfirm 이 변수는 비밀번호 확인 받는 변수라고 생각하면 돼 . 그래서 loginPw값이랑 loginPwConfirm이 변수의 값이랑 같으면 이제 회원가입 성공 하는거야.

  • 그리고 Id와 마찬가지로 공백이나 값이 없으면 다시 쓰라고 할거고, 만약 loginPw값이랑 loginPwConfirm이 다르면? 안되겠지? 그러면 loginCheckPw변수를 false로 변경해. 만약에 일치하면 true 값 그대로니까 비밀번호는 성공이야!!

  • 이제 name도 있는데 name도 마찬가지로 비어있거나 공백이 들어가있으면 다시 써야해.

  • 이제 sql문을 돌면서 입력된 Id, Pw, name을 insert문으로 넣어주고 id에 저장하면 회원가입 끝~!

profile
아자아자자

0개의 댓글