글을 삭제하거나 수정할 때 글이 있는지 없는지 보고 삭제를 하던가 수정을 하잖아? 그래서 우리는 삭제, 수정 기능을 수행하기 전에 글 유무 판단을 먼저 하고 기능을 수행 할 거야.
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 글은 없는거야!!
이제 회원가입을 진행 할건데, 생각해야하는게 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하면? 아이디 중복이 안되고 사용자가 잘 알아듣겠지??
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에 저장하면 회원가입 끝~!