본문 바로가기
Java/└ [JDBC] Practice

[실습문제] 회원정보 수정/삭제/검색 완성시키기

by 박채니 2022. 5. 4.

안녕하세요, 코린이의 코딩 학습기 채니 입니다.

 

개인 포스팅용으로 내용에 오류 및 잘못된 정보가 있을 수 있습니다.


전체 회원 조회

 0 ~ n건이 조회될 때, 실제 조회 결과가 0건이면 빈 ArrayList객체를 반환

MemberMenu

public class MemberMenu {
	private Scanner sc = new Scanner(System.in);
	private MemberController memberController = new MemberController();
	private SimpleDateFormat dateFormatRegDate = new SimpleDateFormat("yyyyMMdd");
	
	public void mainMenu() {
		String menu = "\n******** 회원 정보 관리 ********\n"
				+ "1. 전체 조회\n"
				+ "2. 아이디 조회\n"
				+ "3. 이름 검색 \n"
				+ "4. 회원가입\n"
				+ "5. 회원 정보 변경\n"
				+ "6. 회원 탈퇴\n"
				+ "0. 프로그램 종료\n"
				+ "*****************************\n"
				+ "선택 : ";
	
		while(true) {
			System.out.print(menu);
			String choice = sc.next();
			
			Member member = null;
			int result = 0;
			String id = null;
			List<Member> members = null;
			
			switch(choice) {
			case "1" : 
				members = memberController.findAll();
				printMembers(members);
				break;
			case "2" : break;
			case "3" : break;
			case "4" : 
				member = inputMember();
				result = memberController.inputMember(member);
				System.out.println(result > 0 ? "> 회원가입 성공!" : "> 회원가입 실패!");
				break;
			case "5" : 
				member = updateMember();
				result = memberController.updateMember(member);
				System.out.println(result > 0 ? "> " + result + "행 수정 완료!" : "> 회원 정보 수정 실패!");
				break;
			case "6" : 
				id = deleteMember();
				result = memberController.deleteMember(id);
				System.out.println(result > 0 ? "> " + result + "행 삭제 완료!" : "> 회원 탈퇴 실패!");
				break;
			case "0" : return;
			default : System.out.println("잘못 입력하셨습니다.");
			}
		}
	}
	/**
	 * 1. 전체 회원 조회
	 *  0 ~ n건이 조회될 때, 실제 조회 결과가 0건이면 빈 ArrayList객체를 반환
	 */
	private void printMembers(List<Member> members) {
		if(members == null || members.isEmpty()) {
			System.out.println("> 조회된 결과가 없습니다.");
		} else {
			System.out.printf("%s\t%s\t%s\t%s\t%s\t%s\t%s\t\n",
					"id", "name", "gender", "birthday", "email", "point", "regDate");
			System.out.println("-------------------------------------------------------------------------");
		
			for(Member member : members) {
				System.out.printf("%s\t%s\t%s\t%s\t%s\t%s\t%s\t\n",
						member.getId(),
						member.getName(),
						member.getGender(),
						member.getBirthday(),
						member.getEmail(),
						member.getPoint(),
						dateFormatRegDate.format(member.getRegDate())
					);
			}
			System.out.println("-------------------------------------------------------------------------");
		}
	}
}

 

MemberController

public class MemberController {
	
	private MemberDao memberDao = new MemberDao();
	
	// 1. 전체 회원 조회
	public List<Member> findAll() {
		return memberDao.findAll();
	}
}

 

MemberDao

public class MemberDao {
	final String driverClass = "oracle.jdbc.OracleDriver";
	final String url = "jdbc:oracle:thin:@localhost:1521:xe";	//db접속프로토콜@ip:포트:db명(sid)
	final String user = "student";
	final String password = "student";
	
	// 1. 전체 회원 조회
	public List<Member> findAll() {
		Connection conn = null;
		PreparedStatement pstmt = null;
		ResultSet rset = null;
		String sql = "select * from member order by reg_date desc";
		List<Member> members = new ArrayList<>();
		
		try {
			Class.forName(driverClass);
			conn = DriverManager.getConnection(url, user, password);
			pstmt = conn.prepareStatement(sql);
			rset = pstmt.executeQuery();
			while(rset.next()) {
				Member member = new Member();
				member.setId(rset.getString("id"));
				member.setName(rset.getString("name"));
				member.setGender(rset.getString("gender"));
				member.setBirthday(rset.getDate("birthday"));
				member.setEmail(rset.getString("email"));
				member.setPoint(rset.getInt("point"));
				member.setRegDate(rset.getTimestamp("reg_date"));
				
				members.add(member);
			}
		} catch(ClassNotFoundException | SQLException e) {
			e.printStackTrace();
		} finally {
			try {
				rset.close();
			} catch (Exception e) {
				e.printStackTrace();
			}
			try {
				pstmt.close();
			} catch (Exception e) {
				e.printStackTrace();
			}
			try {
				conn.close();
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		return members;
	}
}

 

@전체 회원 조회해보기

******** 회원 정보 관리 ********
1. 전체 조회
2. 아이디 조회
3. 이름 검색 
4. 회원가입
5. 회원 정보 변경
6. 회원 탈퇴
0. 프로그램 종료
*****************************
선택 : 1
id	name	gender	birthday	email	point	regDate	
-------------------------------------------------------------------------
koo	입벌구	M	1989-08-09	koo@naver.com	1000	20220503	
qwerty	쿼티	F	null	qwerty@naver.com	1000	20220502	
leess	이순신	M	null	leess@naver.com	1000	20220502	
gogd	고길동	M	1980-02-15	gogd@naver.com	1000	20220502	
sinsa	신사임당	F	1995-05-05	sinsa@naver.com	1000	20220502	
honggd	홍길동	M	1999-09-09	honggd@naver.com	1000	20220502	
-------------------------------------------------------------------------

 


아이디 조회

MemberMenu

public class MemberMenu {
	private Scanner sc = new Scanner(System.in);
	private MemberController memberController = new MemberController();
	private SimpleDateFormat dateFormatRegDate = new SimpleDateFormat("yyyyMMdd");
	
	public void mainMenu() {
		String menu = "\n******** 회원 정보 관리 ********\n"
				+ "1. 전체 조회\n"
				+ "2. 아이디 조회\n"
				+ "3. 이름 검색 \n"
				+ "4. 회원가입\n"
				+ "5. 회원 정보 변경\n"
				+ "6. 회원 탈퇴\n"
				+ "0. 프로그램 종료\n"
				+ "*****************************\n"
				+ "선택 : ";
	
		while(true) {
			System.out.print(menu);
			String choice = sc.next();
			
			Member member = null;
			int result = 0;
			String id = null;
			List<Member> members = null;
			
			switch(choice) {
			case "1" : 
				members = memberController.findAll();
				printMembers(members);
				break;
			case "2" : 
				id = inputMemberId();
				member = memberController.findById(id);
				printMember(member);
				break;
			case "3" : break;
			case "4" : 
				member = inputMember();
				result = memberController.inputMember(member);
				System.out.println(result > 0 ? "> 회원가입 성공!" : "> 회원가입 실패!");
				break;
			case "5" : 
				member = updateMember();
				result = memberController.updateMember(member);
				System.out.println(result > 0 ? "> " + result + "행 수정 완료!" : "> 회원 정보 수정 실패!");
				break;
			case "6" : 
				id = deleteMember();
				result = memberController.deleteMember(id);
				System.out.println(result > 0 ? "> " + result + "행 삭제 완료!" : "> 회원 탈퇴 실패!");
				break;
			case "0" : return;
			default : System.out.println("잘못 입력하셨습니다.");
			}
		}
	}

	//2. 아이디 입력 받기
	private String inputMemberId() {
		System.out.print("> 아이디를 입력하세요 : ");
		return sc.next();
	}
	
	/**
	 * 2. 아이디 조회
	 * 0 ~ 1건이 조회될 때, 실제 조회 결과가 0건이면, null을 리턴
	 */
	private void printMember(Member member) {
		if(member == null) {
			System.out.println("> 조회된 결과가 없습니다.");
		} else {
			System.out.println("-------------------------------------------");
			System.out.printf("%-10s : %s\n", "id", member.getId());
			System.out.printf("%-10s : %s\n", "name", member.getName());
			System.out.printf("%-10s : %s\n", "gender", member.getGender());
			System.out.printf("%-10s : %s\n", "birthday", member.getBirthday());
			System.out.printf("%-10s : %s\n", "email", member.getEmail());
			System.out.printf("%-10s : %s\n", "point", member.getPoint());
			System.out.printf("%-10s : %s\n", "regDate", dateFormatRegDate.format(member.getRegDate()));
			System.out.println("-------------------------------------------");
		}
	}
}

 

MemberController

public class MemberController {
	
	private MemberDao memberDao = new MemberDao();

	// 2. 아이디 조회
	public Member findById(String id) {
		return memberDao.findById(id);
	}
}

 

MemberDao

public class MemberDao {
	final String driverClass = "oracle.jdbc.OracleDriver";
	final String url = "jdbc:oracle:thin:@localhost:1521:xe";	//db접속프로토콜@ip:포트:db명(sid)
	final String user = "student";
	final String password = "student";

	// 2. 아이디 조회
	public Member findById(String id) {
		Connection conn = null;
		PreparedStatement pstmt = null;
		ResultSet rset = null;
		Member member = null;	// 0 ~ 1건 조회 시, 실제 조회 결과가 0건이면 null을 리턴
		String sql = "select * from member where id = ?";
		
		try {
			Class.forName(driverClass);
			conn = DriverManager.getConnection(url, user, password);
			pstmt = conn.prepareStatement(sql);
			pstmt.setString(1, id);
			rset = pstmt.executeQuery();
			while(rset.next()) {
				member = new Member();
				
				member.setId(id);
				member.setName(rset.getString("name"));
				member.setGender(rset.getString("gender"));
				member.setBirthday(rset.getDate("birthday"));
				member.setEmail(rset.getString("email"));
				member.setPoint(rset.getInt("point"));
				member.setRegDate(rset.getTimestamp("reg_date"));
			}
		} catch (ClassNotFoundException | SQLException e) {
			e.printStackTrace();
		} finally {
			try {
				rset.close();
			} catch (Exception e) {
				e.printStackTrace();
			}
			try {
				pstmt.close();
			} catch (Exception e) {
				e.printStackTrace();
			}
			try {
				conn.close();
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		return member;
	}
}

 

@아이디 조회 해보기

******** 회원 정보 관리 ********
1. 전체 조회
2. 아이디 조회
3. 이름 검색 
4. 회원가입
5. 회원 정보 변경
6. 회원 탈퇴
0. 프로그램 종료
*****************************
선택 : 2
> 아이디를 입력하세요 : honggd
-------------------------------------------
id         : honggd
name       : 홍길동
gender     : M
birthday   : 1999-09-09
email      : honggd@naver.com
point      : 1000
regDate    : 20220502
-------------------------------------------

 


이름 검색

MemberMenu

public class MemberMenu {
	private Scanner sc = new Scanner(System.in);
	private MemberController memberController = new MemberController();
	private SimpleDateFormat dateFormatRegDate = new SimpleDateFormat("yyyyMMdd");
	
	public void mainMenu() {
		String menu = "\n******** 회원 정보 관리 ********\n"
				+ "1. 전체 조회\n"
				+ "2. 아이디 조회\n"
				+ "3. 이름 검색 \n"
				+ "4. 회원가입\n"
				+ "5. 회원 정보 변경\n"
				+ "6. 회원 탈퇴\n"
				+ "0. 프로그램 종료\n"
				+ "*****************************\n"
				+ "선택 : ";
	
		while(true) {
			System.out.print(menu);
			String choice = sc.next();
			
			Member member = null;
			int result = 0;
			String id = null;
			List<Member> members = null;
			String name = null;
			
			switch(choice) {
			case "1" : 
				members = memberController.findAll();
				printMembers(members);
				break;
			case "2" : 
				id = inputMemberId();
				member = memberController.findById(id);
				printMember(member);
				break;
			case "3" : 
				name = inputMemberName();
				members = memberController.findByName(name);
				printMembers(members);
				break;
			case "4" : 
				member = inputMember();
				result = memberController.inputMember(member);
				System.out.println(result > 0 ? "> 회원가입 성공!" : "> 회원가입 실패!");
				break;
			case "5" : 
				member = updateMember();
				result = memberController.updateMember(member);
				System.out.println(result > 0 ? "> " + result + "행 수정 완료!" : "> 회원 정보 수정 실패!");
				break;
			case "6" : 
				id = deleteMember();
				result = memberController.deleteMember(id);
				System.out.println(result > 0 ? "> " + result + "행 삭제 완료!" : "> 회원 탈퇴 실패!");
				break;
			case "0" : return;
			default : System.out.println("잘못 입력하셨습니다.");
			}
		}
	}

	// 3. 이름 검색
	private String inputMemberName() {
		System.out.print("> 찾으실 이름을 입력하세요 : ");
		return sc.next();
	}

	/**
	 * 1. 전체 회원 조회 메소드 이용하여 출력
	 *  0 ~ n건이 조회될 때, 실제 조회 결과가 0건이면 빈 ArrayList객체를 반환
	 */
	private void printMembers(List<Member> members) {
		if(members == null || members.isEmpty()) {
			System.out.println("> 조회된 결과가 없습니다.");
		} else {
			System.out.printf("%s\t%s\t%s\t%s\t%s\t%s\t%s\t\n",
					"id", "name", "gender", "birthday", "email", "point", "regDate");
			System.out.println("-------------------------------------------------------------------------");
		
			for(Member member : members) {
				System.out.printf("%s\t%s\t%s\t%s\t%s\t%s\t%s\t\n",
						member.getId(),
						member.getName(),
						member.getGender(),
						member.getBirthday(),
						member.getEmail(),
						member.getPoint(),
						dateFormatRegDate.format(member.getRegDate())
					);
			}
			System.out.println("-------------------------------------------------------------------------");
		}
	}

 

MemberController

public class MemberController {
	
	private MemberDao memberDao = new MemberDao();

	// 3. 이름 조회
	public List<Member> findByName(String name) {
		return memberDao.findByName(name);
	}
}

 

MemberDao

public class MemberDao {
	final String driverClass = "oracle.jdbc.OracleDriver";
	final String url = "jdbc:oracle:thin:@localhost:1521:xe";	//db접속프로토콜@ip:포트:db명(sid)
	final String user = "student";
	final String password = "student";
	
	// 3. 이름 검색
	public List<Member> findByName(String name) {
		Connection conn = null;
		PreparedStatement pstmt = null;
		ResultSet rset = null;
		List<Member> members = new ArrayList<>();
		String sql = "select * from member where name like ?";
		
		try {
			Class.forName(driverClass);
			conn = DriverManager.getConnection(url, user, password);
			pstmt = conn.prepareStatement(sql);
			pstmt.setString(1, "%" + name + "%");
			rset = pstmt.executeQuery();
			while(rset.next()) {
				Member member = new Member();
				member.setId(rset.getString("id"));
				member.setName(rset.getString("name"));
				member.setGender(rset.getString("gender"));
				member.setBirthday(rset.getDate("birthday"));
				member.setEmail(rset.getString("email"));
				member.setPoint(rset.getInt("point"));
				member.setRegDate(rset.getTimestamp("reg_date"));
				members.add(member);
			}
		} catch (ClassNotFoundException | SQLException e) {
			e.printStackTrace();
		} finally {
			try {
				rset.close();
			} catch (Exception e) {
				e.printStackTrace();
			}
			try {
				pstmt.close();
			} catch (Exception e) {
				e.printStackTrace();
			}
			try {
				conn.close();
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		return members;
	}
}

 

@이름 검색 해보기

******** 회원 정보 관리 ********
1. 전체 조회
2. 아이디 조회
3. 이름 검색 
4. 회원가입
5. 회원 정보 변경
6. 회원 탈퇴
0. 프로그램 종료
*****************************
선택 : 3
> 찾으실 이름을 입력하세요 : 길동
id	name	gender	birthday	email	point	regDate	
-------------------------------------------------------------------------
honggd	홍길동	M	1999-09-09	honggd@naver.com	1000	20220502	
gogd	고길동	M	1980-02-15	gogd@naver.com	1000	20220502	
-------------------------------------------------------------------------

 


회원 정보 변경

MemberMenu

public class MemberMenu {
	private Scanner sc = new Scanner(System.in);
	private MemberController memberController = new MemberController();
	private SimpleDateFormat dateFormatRegDate = new SimpleDateFormat("yyyyMMdd");
	
	public void mainMenu() {
		String menu = "\n******** 회원 정보 관리 ********\n"
				+ "1. 전체 조회\n"
				+ "2. 아이디 조회\n"
				+ "3. 이름 검색 \n"
				+ "4. 회원가입\n"
				+ "5. 회원 정보 변경\n"
				+ "6. 회원 탈퇴\n"
				+ "0. 프로그램 종료\n"
				+ "*****************************\n"
				+ "선택 : ";
	
		while(true) {
			System.out.print(menu);
			String choice = sc.next();
			
			Member member = null;
			int result = 0;
			
			switch(choice) {
			case "1" : break;
			case "2" : break;
			case "3" : break;
			case "4" : 
				member = inputMember();
				result = memberController.inputMember(member);
				System.out.println(result > 0 ? "> 회원가입 성공!" : "> 회원가입 실패!");
				break;
			case "5" : 
				member = updateMember();
				result = memberController.updateMember(member);
				System.out.println(result > 0 ? result + "행 수정 완료!" : "> 회원 정보 수정 실패!");
				break;
			case "6" : break;
			case "0" : return;
			default : System.out.println("잘못 입력하셨습니다.");
			}
		}
	}
    
	/**
	 * 5. 회원 정보 변경
	 * 이름, 성별, 생일, 이메일을 한번에 변경
	 */
	private Member updateMember() {
		System.out.print("> 아이디를 입력하세요 : ");
		String id = sc.next();
		System.out.print("> 변경하실 이름을 입력하세요 : ");
		String name = sc.next();
		System.out.print("> 변경하실 성별을 입력하세요 : ");
		String gender = String.valueOf(sc.next().toUpperCase().charAt(0));
		System.out.print("> 변경하실 생일을 입력하세요 : ");
		String temp = sc.next();
		Date birthday = null;
		try {
			birthday = new Date(dateFormatRegDate.parse(temp).getTime());
		} catch (ParseException e) {
			e.printStackTrace();
		}
		System.out.print("> 변경하실 이메일을 입력하세요 : ");
		String email = sc.next();
		
		return new Member(id, name, gender, birthday, email, 0, null);
	}
}

 

MemberController

public class MemberController {
	
	private MemberDao memberDao = new MemberDao();
	
	// 5. 회원 정보 변경
	public int updateMember(Member member) {
		return memberDao.updateMember(member);
	}
}

 

MemberDao

public class MemberDao {
	final String driverClass = "oracle.jdbc.OracleDriver";
	final String url = "jdbc:oracle:thin:@localhost:1521:xe";	//db접속프로토콜@ip:포트:db명(sid)
	final String user = "student";
	final String password = "student";
	
	// 5. 회원 정보 변경
	public int updateMember(Member member) {
		Connection conn = null;
		PreparedStatement pstmt = null;
		int result = 0;
		String sql = "update member set name = ?, gender = ? , birthday = ?, email = ? where id = ?";
		
		try {
			Class.forName(driverClass);
			
			conn = DriverManager.getConnection(url, user, password);
			conn.setAutoCommit(false);
			
			pstmt = conn.prepareStatement(sql);
			pstmt.setString(1, member.getName());
			pstmt.setString(2, member.getGender());
			pstmt.setDate(3, member.getBirthday());
			pstmt.setString(4, member.getEmail());
			pstmt.setString(5, member.getId());
			
			result = pstmt.executeUpdate();
			
			conn.commit();
		} catch (ClassNotFoundException | SQLException e) {
			try {
				conn.rollback();
			} catch (SQLException e1) {
				e1.printStackTrace();
			}
			e.printStackTrace();
		} finally {
			try {
				pstmt.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
			try {
				conn.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		return result;
	}
}

 

@회원 정보 변경하기

******** 회원 정보 관리 ********
1. 전체 조회
2. 아이디 조회
3. 이름 검색 
4. 회원가입
5. 회원 정보 변경
6. 회원 탈퇴
0. 프로그램 종료
*****************************
선택 : 5
> 아이디를 입력하세요 : chany
> 변경하실 이름을 입력하세요 : 박채금
> 변경하실 성별을 입력하세요 : M
> 변경하실 생일을 입력하세요 : 19750405
> 변경하실 이메일을 입력하세요 : chany@naver.com
1행 수정 완료!

select * from member;

 


회원 탈퇴

MemberMenu

public class MemberMenu {
	private Scanner sc = new Scanner(System.in);
	private MemberController memberController = new MemberController();
	private SimpleDateFormat dateFormatRegDate = new SimpleDateFormat("yyyyMMdd");
	
	public void mainMenu() {
		String menu = "\n******** 회원 정보 관리 ********\n"
				+ "1. 전체 조회\n"
				+ "2. 아이디 조회\n"
				+ "3. 이름 검색 \n"
				+ "4. 회원가입\n"
				+ "5. 회원 정보 변경\n"
				+ "6. 회원 탈퇴\n"
				+ "0. 프로그램 종료\n"
				+ "*****************************\n"
				+ "선택 : ";
	
		while(true) {
			System.out.print(menu);
			String choice = sc.next();
			
			Member member = null;
			int result = 0;
			String id = null;
			
			switch(choice) {
			case "1" : break;
			case "2" : break;
			case "3" : break;
			case "4" : 
				member = inputMember();
				result = memberController.inputMember(member);
				System.out.println(result > 0 ? "> 회원가입 성공!" : "> 회원가입 실패!");
				break;
			case "5" : 
				member = updateMember();
				result = memberController.updateMember(member);
				System.out.println(result > 0 ? "> " + result + "행 수정 완료!" : "> 회원 정보 수정 실패!");
				break;
			case "6" : 
				id = deleteMember();
				result = memberController.deleteMember(id);
				System.out.println(result > 0 ? "> " + result + "행 삭제 완료!" : "> 회원 탈퇴 실패!");
				break;
			case "0" : return;
			default : System.out.println("잘못 입력하셨습니다.");
			}
		}
	}
    
	/**
	 * 6. 회원 탈퇴
	 */
	private String deleteMember() {
		System.out.print("> 탈퇴할 아이디를 입력하세요 : ");
		String id = sc.next();
		return id;
	}
}

 

MemberController

public class MemberController {
	
	private MemberDao memberDao = new MemberDao();

	// 6. 회원 탈퇴
	public int deleteMember(String id) {
		return memberDao.deleteMember(id);
	}
}

 

MemberDao

public class MemberDao {
	final String driverClass = "oracle.jdbc.OracleDriver";
	final String url = "jdbc:oracle:thin:@localhost:1521:xe";	//db접속프로토콜@ip:포트:db명(sid)
	final String user = "student";
	final String password = "student";
	
	// 6. 회원 탈퇴
	public int deleteMember(String id) {
		Connection conn = null;
		PreparedStatement pstmt = null;
		int result = 0;
		String sql = "delete from member where id = ?";
		
		try {
			Class.forName(driverClass);
			
			conn = DriverManager.getConnection(url, user, password);
			conn.setAutoCommit(false);
			
			pstmt = conn.prepareStatement(sql);
			pstmt.setString(1, id);
			
			result = pstmt.executeUpdate();
			
			conn.commit();
		} catch (ClassNotFoundException | SQLException e) {
			try {
				conn.rollback();
			} catch (SQLException e1) {
				e1.printStackTrace();
			}
			e.printStackTrace();
		} finally {
			try {
				pstmt.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
			try {
				conn.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		return result;
	}
}

 

@회원 탈퇴하기

******** 회원 정보 관리 ********
1. 전체 조회
2. 아이디 조회
3. 이름 검색 
4. 회원가입
5. 회원 정보 변경
6. 회원 탈퇴
0. 프로그램 종료
*****************************
선택 : 6
> 탈퇴할 아이디를 입력하세요 : chany
> 1행 삭제 완료!

select * from member;

'Java > └ [JDBC] Practice' 카테고리의 다른 글

[실습문제] JDBC 종합  (0) 2022.05.10