본문 바로가기
STUDY/JAVA

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

by Anne of Green Galbes 2019. 2. 1.

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



댓글