STUDY/JAVA

Java 20일차(2) - 회원가입 DB연결하여 만들기

Anne of Green Galbes 2019. 2. 1. 17:57

1. 테이블 만들기

create table naverMember

(id varchar2(15) primary key,

pw varchar2(15) not null,

name varchar2(20) not null,

gender varchar2(10),

birth varchar2(10),

email varchar2(25),

tel varchar2(13));

○ 테이블 명 : naverMember

○ 컬럼

id : 아이디. 15자 이내

pw : 비밀번호. 15자 이내

name : 이름

gender : 성별

birth : 생일. 형식 xxxx-xx-xx

email : 이메일. 형식 xxxxx@daum.net

tel : 전화번호. 형식 010-xxxx-xxxx


2.  NaverDTO

package com.naver3;


public class NaverDTO {

private String id;

private String pw;

private String name;

private String gender;

private String birth;

private String email;

private String tel;

public String getId() {

return id;

}

public void setId(String id) {

this.id = id;

}

public String getPw() {

return pw;

}

public void setPw(String pw) {

this.pw = pw;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public String getGender() {

return gender;

}

public void setGender(String gender) {

this.gender = gender;

}

public String getBirth() {

return birth;

}

public void setBirth(String birth) {

this.birth = birth;

}

public String getEmail() {

return email;

}

public void setEmail(String email) {

this.email = email;

}

public String getTel() {

return tel;

}

public void setTel(String tel) {

this.tel = tel;

}

@Override

public String toString() {

String str = String.format("아이디:%s \n이름:%s \n성별:%s \n생일:%s \n이메일:%s \n번호:%s \n",

id, name, gender, birth, email, tel);

return str;

}

}


3. 예외처리

① AuthenException

package com.naver3;


public class AuthenException extends Exception{

private static final long serialVersionUID = 1L;

public AuthenException(String message){

super(message);

}

}

② NaverException

package com.naver3;


public class NaverException {

        //아이디 확인

public void idFormat(String str) throws AuthenException{

if(str.length()<5 || str.length()>15){

throw new AuthenException("5~15자 이내의 아이디만 가능합니다");

}

int cnt1=0;

int cnt2=0;

for(int i=0;i<str.length();i++){

char ch = str.charAt(i);

if((ch>='a' && ch<='z') || (ch>='A' && ch<='Z'))

cnt1++;

else if(ch>='0' && ch<='9')

cnt2++;

}

if(cnt1==0 || cnt2==0)

throw new AuthenException("아이디는 영문자와 숫자를 혼용해서 만들어주세요");

}

      //비밀번호 확인

public void pwCheck(String pw1, String pw2) throws AuthenException{

int cnt1=0;

int cnt2=0;

for(int i=0;i<pw1.length();i++){

char ch = pw1.charAt(i);

if((ch>='a' && ch<='z') || (ch>='A' && ch<='Z'))

cnt1++;

else if(ch>='0' && ch<='9')

cnt2++;

}

if(cnt1==0 || cnt2==0)

throw new AuthenException("비밀번호는 영문자와 숫자를 혼용해서 만들어주세요");

if(!pw1.equals(pw2))

throw new AuthenException("비밀번호가 다릅니다");

}


//성별확인

public void genCheck(String gender) throws AuthenException{

if(!gender.equals("남") && !gender.equals("여")){

throw new AuthenException("※성별이 모호하군요!\n성별은 여/남으로 적어주세요;)");

}

}


//이름 확인

public void nameCheck(String name) throws AuthenException {

boolean check = Pattern.matches("^[ㄱ-ㅎ가-힣]*$", name);

if (!check)

throw new AuthenException("※이름은 한글로 입력해주세요");

}


// 전화번호 확인

public void phoneCheck(String phone) throws AuthenException {

boolean check = Pattern.matches(

"(010|011|016|017|018?019)-(\\d{3,4})-(\\d{4})", phone);

if (!check)

throw new AuthenException("※전화번호 입력 형식은 [XXX-XXXX-XXXX]입니다");

}


}


4. NaverDAO

사용자가 입력한 값을 sql문을 이용하여 DB에 넣는 과정

package com.naver3;


import java.sql.Connection;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.util.ArrayList;

import java.util.List;

import com.db.DBConn;


public class NaverDAO {

//1.insert

public int insertData(NaverDTO dto){

int result = 0;

Connection conn = DBConn.getConnection();

PreparedStatement pstmt = null;

String sql;

try {

sql = "insert into naverMember (id,pw,name,gender,birth,email,tel) ";

sql+= "values (?,?,?,?,?,?,?)";

pstmt = conn.prepareStatement(sql);

pstmt.setString(1, dto.getId());

pstmt.setString(2, dto.getPw());

pstmt.setString(3, dto.getName());

pstmt.setString(4, dto.getGender());

pstmt.setString(5, dto.getBirth());

pstmt.setString(6, dto.getEmail());

pstmt.setString(7, dto.getTel());

result = pstmt.executeUpdate();

pstmt.close();

} catch (Exception e) {

System.out.println(e.toString());

}

return result;

}


//2.update

public int updateData(NaverDTO dto){

int result = 0;

Connection conn = DBConn.getConnection();

PreparedStatement pstmt = null;

String sql;

try {

sql = "update naverMember set pw=?, email=?, tel=? ";

sql+= "where id=?";

pstmt = conn.prepareStatement(sql);

pstmt.setString(1, dto.getPw());

pstmt.setString(2, dto.getEmail());

pstmt.setString(3, dto.getTel());

pstmt.setString(4, dto.getId());

result = pstmt.executeUpdate();

pstmt.close();

} catch (Exception e) {

System.out.println(e.toString());

}

return result;

}


//3.delete

public int deleteDate(String id, String pw){

int result = 0;

Connection conn = DBConn.getConnection();

PreparedStatement pstmt = null;

String sql;

try {

sql = "delete naverMember where id=? and pw=?";

pstmt = conn.prepareStatement(sql);

pstmt.setString(1, id);

pstmt.setString(2, pw);

result = pstmt.executeUpdate();

pstmt.close();

} catch (Exception e) {

System.out.println(e.toString());

}

return result;

}


//4.selectAll

public List<NaverDTO> getList() {

List<NaverDTO> lists = new ArrayList<NaverDTO>();

Connection conn = DBConn.getConnection();

PreparedStatement pstmt = null;

ResultSet rs = null;

String sql;

try {

sql = "select id,pw,name,gender,birth,email,tel ";

sql+= "from naverMember order by name";

pstmt = conn.prepareStatement(sql);

rs = pstmt.executeQuery();

while(rs.next()){

NaverDTO dto = new NaverDTO();

dto.setId(rs.getString("id"));

dto.setPw(rs.getString("pw"));

dto.setName(rs.getString("name"));

dto.setGender(rs.getString("gender"));

dto.setBirth(rs.getString("birth"));

dto.setEmail(rs.getString("email"));

dto.setTel(rs.getString("tel"));

lists.add(dto);

}

rs.close();

pstmt.close();

} catch (Exception e) {

System.out.println(e.toString());

}

return lists;

}


//5.searchId

public List<NaverDTO> getList(String id){

List<NaverDTO> lists = new ArrayList<NaverDTO>();

Connection conn = DBConn.getConnection();

PreparedStatement pstmt = null;

ResultSet rs = null;

String sql;

try{

sql = "select id,pw,name,gender,birth,email,tel ";

sql+= "from naverMember where id=?";

pstmt = conn.prepareStatement(sql);

pstmt.setString(1, id);

rs = pstmt.executeQuery();

while(rs.next()){

NaverDTO dto = new NaverDTO();

dto.setId(rs.getString("id"));

dto.setPw(rs.getString("pw"));

dto.setName(rs.getString("name"));

dto.setGender(rs.getString("gender"));

dto.setBirth(rs.getString("birth"));

dto.setEmail(rs.getString("email"));

dto.setTel(rs.getString("tel"));

lists.add(dto);

}

rs.close();

pstmt.close();

}catch (Exception e) {

System.out.println(e.toString());

}

return lists;

}


}


5. Naver

사용자에게 입력받는 부분

package com.naver3;


import java.util.Iterator;

import java.util.List;

import java.util.Scanner;


public class Naver {

Scanner sc = new Scanner(System.in);

NaverDAO dao = new NaverDAO();

NaverException ne = new NaverException();

//회원가입

public void insert() throws AuthenException {

String pw2=null;

boolean id=true;

boolean pw=true;

boolean name=true;

boolean gender=true;

boolean tel=true;

System.out.println("                 회원가입");

System.out.println("-------------------------------------");

try {

NaverDTO dto = new NaverDTO();

do{

try{

System.out.print("아이디:");

dto.setId(sc.next);;

ne.idFormat(dto.getId);

id=false;

}catch (AuthenException e) {

System.out.println(e.toString());

}

} while(id);

do{

try{

System.out.print("비밀번호:");

dto.setPw(sc.next());

System.out.print("비밀번호 확인:");

pw2 = sc.next();

ne.pwCheck(dto.getPw(), pw2);

pw=false;

}catch (AuthenException e) {

System.out.println(e.toString());

}

} while(pw);


do{

try{

System.out.print("이름:");

dto.setName(sc.next());

ne.nameCheck(dto.getName());

name=false;

}catch (AuthenException e) {

System.out.println(e.toString());

}

} while(name);


do{

try{

System.out.print("성별[여/남]:");

dto.setGender(sc.next());

ne.genCheck(dto.getGender());

gender=false;

}catch (AuthenException e) {

System.out.println(e.toString());

}

} while(gender);

System.out.print("생일[xxxx-xx-xx]:");

dto.setBirth(sc.next());

System.out.print("이메일[xxxxx@daum.net]:");

dto.setEmail(sc.next());



do{

try{

System.out.print("전화번호[xxx-xxxx-xxxx]:");

dto.setTel(sc.next());

ne.phoneCheck(dto.getTel());

tel=false;

}catch (AuthenException e) {

System.out.println(e.toString());

}

} while(tel);

int result = dao.insertData(dto);

if(result!=0){

System.out.println();

System.out.println("****성공적으로 가입이 되었습니다!****");

System.out.println();

System.out.println("-----------[회원가입 확인]-----------");

System.out.println(dto.toString());

}

else

System.out.println("회원가입에 실패했습니다");

} catch (Exception e) {

System.out.println(e.toString());

}

}

//수정

public void update() {

try {

NaverDTO dto = new NaverDTO();

System.out.print("수정 할 아이디:");

dto.setId(sc.next());

System.out.print("비밀번호:");

dto.setPw(sc.next());

System.out.print("이메일[xxxxx@daum.net]:");

dto.setEmail(sc.next());

System.out.print("전화번호[xxx-xxxx-xxxx]:");

dto.setTel(sc.next());

int result = dao.updateData(dto);

if(result!=0)

System.out.println("회원정보가 수정되었습니다");

else

System.out.println("회원정보수정에 실패했습니다");

} catch (Exception e) {

System.out.println(e.toString());

}

}

//탈퇴

public void delete() {

try {

String id, pw;

System.out.print("탈퇴 할 아이디:");

id = sc.next();

System.out.print("비밀번호 확인:");

pw = sc.next();

int result = dao.deleteDate(id,pw);

if(result!=0)

System.out.println("성공적으로 탈퇴하였습니다.\n다음에 다시 가입해주세요! ;)");

else

System.out.println("탈퇴에 실패했습니다.\n영원히 회원으로 남아주세요:)");

} catch (Exception e) {

System.out.println(e.toString());

}

}

//회원 전체출력

public void selectAll() {

List<NaverDTO> lists = dao.getList();

Iterator<NaverDTO> it = lists.iterator();

int i=1;

while(it.hasNext()){

NaverDTO dto = it.next();

System.out.println("[회원 "+i+"]");

System.out.println(dto.toString());

i++;

}

}

//아이디검색

public void searchId() {

System.out.print("검색 할 아이디:");

List<NaverDTO> lists = dao.getList(sc.next());

Iterator<NaverDTO> it = lists.iterator();


if(!it.hasNext()){

System.out.println("검색한 아이디는 존재하지 않습니다.");

}


while(it.hasNext()){

NaverDTO dto = it.next();

System.out.println(dto.toString());

}

}

}


6. NaverMain

package com.naver3;


import java.util.Scanner;

import com.db.DBConn;


public class NaverMain {

public static void main(String[] args) throws AuthenException {

Scanner sc = new Scanner(System.in);

Naver ob = new Naver();

int ch;

while(true){

do{

System.out.print("1.입력  2.수정 3.탈퇴  4.회원전체출력 5.아이디검색  6.종료");

System.out.print("\n-------------------------------------\n▶");

ch = sc.nextInt();

} while(ch<1 || ch>6);

System.out.println();

switch(ch){

case 1:

ob.insert();

System.out.println(); break;

case 2:

ob.update();

System.out.println(); break;

case 3:

ob.delete();

System.out.println(); break;

case 4:

ob.selectAll();

System.out.println(); break;

case 5:

ob.searchId();

System.out.println(); break;

case 6:

DBConn.close();

System.exit(0);

}

}

}

}

결과 ① 입력

1.입력 2.수정 3.탈퇴 4.회원전체출력 5.아이디검색 6.종료 -------------------------------------------------------------------------------- ▶1 회원가입 -------------------------------------------------------------------------------- 아이디:sunkist03 비밀번호:orange5 비밀번호 확인:orange5 이름:선키스트 성별[여/남]: 생일[xxxx-xx-xx]:2003-05-05 이메일[xxxxx@daum.net]:sun&orange@daum.net 전화번호[xxx-xxxx-xxxx]:010-5555-5555 *********성공적으로 가입이 되었습니다!*********

------------------------------[회원가입 확인]------------------------------ 아이디:sunkist03 이름:선키스트 성별:여 생일:2003-05-05 이메일:sun&orange@daum.net 번호:010-5555-5555

1.입력 2.수정 3.탈퇴 4.회원전체출력 5.아이디검색 6.종료 --------------------------------------------------------------------------------1 회원가입 -------------------------------------------------------------------------------- 아이디:greengrape12 비밀번호:strawberry10 비밀번호 확인:strawberry10 이름:청포도 성별[여/남]: 생일[xxxx-xx-xx]:2005-01-01 이메일[xxxxx@daum.net]:greenapple@daum.net 전화번호[xxx-xxxx-xxxx]:010-1212-1111 *********성공적으로 가입이 되었습니다!********* ------------------------------[회원가입 확인]------------------------------ 아이디:greengrape12 이름:청포도 성별:남 생일:2005-01-01 이메일:greenapple@daum.net 번호:010-1212-1111


결과 ② 수정

1.입력 2.수정 3.탈퇴 4.회원전체출력 5.아이디검색 6.종료 --------------------------------------------------------------------------------2 수정 할 아이디:sunkist03 비밀번호:lemon21 이메일[xxxxx@daum.net]:sun&lenom@daum.net 전화번호[xxx-xxxx-xxxx]:010-2121-1111 회원정보가 수정되었습니다 1.입력 2.수정 3.탈퇴 4.회원전체출력 5.아이디검색 6.종료 -------------------------------------------------------------------------------- ▶4 [회원 1] 아이디:sunkist03 이름:선키스트 성별:여 생일:2003-05-05 이메일:sun&lenom@daum.net 번호:010-2121-1111 [회원 2] 아이디:greengrape12 이름:청포도 성별:남 생일:2005-01-01 이메일:greenapple@daum.net 번호:010-1212-1111


결과 ③ 탈퇴

1.입력 2.수정 3.탈퇴 4.회원전체출력 5.아이디검색 6.종료 --------------------------------------------------------------------------------3 탈퇴 할 아이디:greengrape12 비밀번호 확인:strawberry10 성공적으로 탈퇴하였습니다. 다음에 다시 가입해주세요! ;)


1.입력 2.수정 3.탈퇴 4.회원전체출력 5.아이디검색 6.종료 --------------------------------------------------------------------------------4 [회원 1] 아이디:sunkist03 이름:선키스트 성별:여 생일:2003-05-05 이메일:sun&lenom@daum.net 번호:010-2121-1111


결과 ④ 아이디검색

1.입력 2.수정 3.탈퇴 4.회원전체출력 5.아이디검색 6.종료 --------------------------------------------------------------------------------4 [회원 1] 아이디:banana87 이름:망고 성별:남 생일:1998-08-08 이메일:banana4@daum.net 번호:010-0808-8888 [회원 2] 아이디:strawbery24 이름:바나나 성별:여 생일:1998-08-08 이메일:strawberry@daum.net 번호:010-0808-8888 [회원 3] 아이디:sunkist03 이름:선키스트 성별:여 생일:2003-05-05 이메일:sun&lenom@daum.net 번호:010-2121-1111


1.입력 2.수정 3.탈퇴 4.회원전체출력 5.아이디검색 6.종료 --------------------------------------------------------------------------------5 검색 할 아이디:today45 검색한 아이디는 존재하지 않습니다. 1.입력 2.수정 3.탈퇴 4.회원전체출력 5.아이디검색 6.종료 -------------------------------------------------------------------------------- 5 검색 할 아이디:sunkist03 아이디:sunkist03 이름:선키스트 성별:여 생일:2003-05-05 이메일:sun&lenom@daum.net 번호:010-2121-1111