[Java] CRUD 예제

고동이의 IT·2021년 11월 19일
0

Java

목록 보기
37/37
post-thumbnail

회원을 관리하는 프로그램을 작성하시오. (MYMEMBER 테이블 이용) 아래 메뉴의 기능을 모두 구현하시오.

(CRUD 기능 구현하기)

메뉴예시)
-- 작업 선택 --
1. 자료추가
2. 자료삭제
3. 자료수정 UPDATE
4. 전체자료출력
5. 자료수정2
0. 작업끝
처리조건)
1) 자료추가에서 '회원ID'는 중복되지 않는다.(중복되면 다시 입력 받는다.)
2) 삭제는 '회원ID'를 입력받아서 처리한다.
3) 자료 수정에서 '회원ID'는 변경되지 않는다.

내 정답

  • nextLine() 오류처리
  • 스위치문 default 처리해주기
package kr.or.ddit.basic;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Scanner;

import kr.or.ddit.util.DBUtil;

/*
 	회원을 관리하는 프로그램을 작성하시오. (MYMEMBER 테이블 이용)
 	아래 메뉴의 기능을 모두 구현하시오. (CRUD 기능 구현하기)
 	메뉴예시) 
 	 -- 작업 선택 --
 	 1. 자료추가
 	 2. 자료삭제
 	 3. 자료수정 UPDATE
 	 4. 전체자료출력
 	 5. 자료수정2
 	 0. 작업끝
 	 
 	 처리조건)
 	 1) 자료추가에서 '회원ID'는 중복되지 않는다.(중복되면 다시 입력 받는다.)
 	 2) 삭제는 '회원ID'를 입력받아서 처리한다.
 	 3) 자료 수정에서 '회원ID'는 변경되지 않는다.
 	 
 */
public class JdbcTest06 {
	static Scanner sc = new Scanner(System.in);
	static Connection conn = null;
	ResultSet rs = null;
	PreparedStatement pstmt = null;
	Statement stmt = null;
	
	public static void main(String[] args) {
		
		conn = DBUtil.getConnection();
		JdbcTest06 j = new JdbcTest06();
		j.start();
		
	}
	
	private void start() {
		
		while(true){

			System.out.println("==작업선택==");
			System.out.println("1.자료추가 2.자료삭제 3.자료수정4.전체자료출력 5.자료수정2 0.작업끝");
			System.out.print("선택>");
			
			int input=sc.nextInt(); 
			sc.nextLine();
			switch(input){
			case 1:  add(); break;
			case 2:  delete();	break;
			case 3:  update(); break;
			case 4:  select(); break;
			case 5: 
			case 0:  System.out.println("프로그램을 종료합니다.");
			        return;
			default : System.out.println("번호를잘못입력했습니다. 다시 입력하세요");

			}
		}


	}

	private void add() {
		try {
			
			String sql = "select mem_id from MYMEMBER";
			stmt = conn.createStatement();
			rs = stmt.executeQuery(sql);
			
			String id = "";
			
			while(true){
				System.out.println("mem_id를 입력해주세요");
			    id = sc.nextLine();
				boolean flag = true;

				while(rs.next()){

					if(rs.getString("mem_id").equals(id)){
						System.out.println("중복입니다. 다시입력해주세요");
						flag = false;
						break;
					}
				}
				if(flag){
					break;
				}
			}
			
			System.out.println("mem_name를 입력해주세요");
			String name = sc.nextLine();
			System.out.println("mem_pass를 입력해주세요");
			String pass = sc.nextLine();
			System.out.println("mem_tel를 입력해주세요");
			String tel = sc.nextLine();
			System.out.println("mem_addr를 입력해주세요");
			String addr = sc.nextLine();
			
			String sql2 = " insert into MYMEMBER values(? , ? , ? , ? , ?)";
			pstmt = conn.prepareStatement(sql2);
			pstmt.setString(1, id);
			pstmt.setString(2, name);
			pstmt.setString(3, pass);
			pstmt.setString(4, tel);
			pstmt.setString(5, addr);
			
			int cnt =pstmt.executeUpdate();
			
			System.out.println("반환값: "+ cnt);
			if(cnt>0){
				System.out.println("insert 성공");
			}else{
				System.out.println("insert 실패");
			}

			
		} catch (SQLException e) {
			e.printStackTrace(); //왜 해주는거니
		}finally{
			//자원 반납 : 만들어진 순의 역순으로

			if(rs!=null) try {
				rs.close();
			} catch (SQLException e) {
				// TODO: handle exception
			}
			if(stmt!=null) try {
				stmt.close();
			} catch (SQLException e) {
				// TODO: handle exception
			}
			if(pstmt!=null) try {
				pstmt.close();
			} catch (SQLException e) {
				// TODO: handle exception
			}
	
		}
	}
	
	
	private void delete() {
		try {
			
			System.out.println("삭제할 회원ID를 입력하세요");
			String did = sc.nextLine();
			
			String sql3 = "delete from MYMEMBER where mem_id = '" + did + "' ";
			
		/*	String sql3 = "delete from MYMEMBER where mem_id = ? ";*/
			stmt = conn.createStatement();
			int cnt = stmt.executeUpdate(sql3);
			
	/*		pstmt = conn.prepareStatement(sql3);
			pstmt.setString(1, did);
			int cnt =pstmt.executeUpdate();*/
			
			System.out.println("반환값: "+ cnt);
			
			if(cnt>0){
				System.out.println("delete 성공");
			}else{
				System.out.println("delete 실패");
			}
			
		} catch (SQLException e) {
			// TODO: handle exception
		}finally{
			//자원 반납 : 만들어진 순의 역순으로

			if(stmt!=null) try {
				stmt.close();
			} catch (SQLException e) {
				// TODO: handle exception
			}
		
		
	}
		
	}
	
	
	private void update() {
		
		try {
			System.out.println("수정할 레코드의 mem_id를 입력해주세요");
			String uid = sc.nextLine();
			

			int count = getMemberCount(uid);
			if(count==0){
				System.out.println(uid+"는 없는 회원 id");
				return ;
			}
			
			System.out.println("수정할 mem_name를 입력해주세요");
			String name = sc.nextLine();
			System.out.println("수정할 mem_pass를 입력해주세요");
			String pass = sc.nextLine();
			System.out.println("수정할 mem_tel를 입력해주세요");
			String tel = sc.nextLine();
			System.out.println("수정할 mem_addr를 입력해주세요");
			String addr = sc.nextLine();
			
			/*String sql4 = "update MYMEMBER set mem_name = ?, mem_pass = ?, mem_tel = ?, mem_addr = ? where mem_id = '" + uid + "' ";*/
			String sql4 = "update MYMEMBER set mem_name = ?, mem_pass = ?, mem_tel = ?, mem_addr = ? where mem_id = ? ";
			pstmt = conn.prepareStatement(sql4);
			pstmt.setString(1, name);
			pstmt.setString(2, pass);
			pstmt.setString(3, tel);
			pstmt.setString(4, addr);
			pstmt.setString(5, uid);
			
			int cnt =pstmt.executeUpdate();

			System.out.println("반환값: "+ cnt);
			if(cnt>0){
				System.out.println("update 성공");
			}else{
				System.out.println("update 실패");
			}
			
			
		} catch (SQLException e) {
			// TODO: handle exception
		}finally{
			//자원 반납 : 만들어진 순의 역순으로

			if(pstmt!=null) try {
				pstmt.close();
			} catch (SQLException e) {
				// TODO: handle exception
			}
		
	}
		
	}
	
	// 회원 id를 인수값으로 받아서 해당 회원 id의 개수를 반환하는 메서드
	private int getMemberCount(String memId){
		Connection conn = null;
		PreparedStatement pstmt = null;
		ResultSet rs = null;

		int count =0;
		try {
			conn = DBUtil.getConnection();
			String sql = "select count(*) cnt from mymember where mem_id=?";
			pstmt = conn.prepareStatement(sql);
			pstmt.setString(1, memId);

			rs = pstmt.executeQuery();

			if(rs.next()){
				count = rs.getInt("cnt");
			}

		} catch (SQLException e) {
			count = 0;
			e.printStackTrace();

		}finally{
			if(rs!=null)try{
				rs.close();
			}catch(SQLException e){

			}
			if(pstmt!=null)try{
				pstmt.close();
			}catch(SQLException e){

			}
			if(conn!=null)try{
				conn.close();
			}catch(SQLException e){

			}
		}

		return count;
	}
	
	// 내정답 - 커밋을 하자^,^..
	private void updateMember2() {


		System.out.println("수정할 회원id: ");
		String id = sc.nextLine();
			
			int count = getMemberCount(id);
			if(count==0){
				System.out.println(id+"는 없는 회원 id");
				return ;
			}
			
			System.out.println("수정할 항목을 선택하세요. 1.회원이름 2.회원비밀번호 3.회원 전화번호 4.회원주소 ");
			int num = sc.nextInt();
			sc.nextLine();
	
	
		try {
			conn = DBUtil.getConnection();
			
			if(num ==1){
				System.out.println("회원이름을 입력하세요");
				String name = sc.nextLine();
				
				String sql = "update MYMEMBER set mem_name = ? where mem_id = ? ";
				
				pstmt = conn.prepareStatement(sql);
				pstmt.setString(1, name);
				pstmt.setString(2, id);
				
				int cnt = pstmt.executeUpdate();
				
				if(cnt>0){
					System.out.println("회원 정보 수정 완료");
				}else{
					System.out.println("회원 정보 수정 실패");
				}
			}
			
			if(num ==2){
				System.out.println("회원비밀번호를 입력하세요");
				String pass = sc.nextLine();
				String sql = "update MYMEMBER set mem_pass = ? where mem_id = ? ";
				pstmt = conn.prepareStatement(sql);
				pstmt.setString(1, pass);
				pstmt.setString(2, id);
				
			}
			
			if(num ==3){
				System.out.println("회원전화번호를 입력하세요");
				String tel = sc.nextLine();
				String sql = "update MYMEMBER set mem_tel = ? where mem_id = ? ";
				pstmt = conn.prepareStatement(sql);
				pstmt.setString(1, tel);
				pstmt.setString(2, id);
				
			}
			
			if(num ==4){
				System.out.println("회원주소를 입력하세요");
				String addr = sc.nextLine();
				String sql = "update MYMEMBER set mem_addr = ? where mem_id = ? ";
				pstmt = conn.prepareStatement(sql);
				pstmt.setString(1, addr);
				pstmt.setString(2, id);
				
			}
				
		} catch (SQLException e) {
			// TODO: handle exception
		}finally{
			if(pstmt!=null) try {
				pstmt.close();
			} catch (SQLException e) {
				// TODO: handle exception
			}
			if(conn!=null) try {
				conn.close();
			} catch (SQLException e) {
				// TODO: handle exception
			}
		}
			
		
	}
	
		
	
	
	private void select() {
		try {
			String sql5 = "select * from MYMEMBER";
			stmt = conn.createStatement();
			rs = stmt.executeQuery(sql5);
			
			
			while(rs.next()){
	   
	    		System.out.println("mem_id: "+rs.getString("mem_id"));
	    		System.out.println("mem_name: "+rs.getString("mem_name"));
	    		System.out.println("mem_pass: "+rs.getString("mem_pass"));
	    		System.out.println("mem_tel: "+rs.getString("mem_tel"));
	    		System.out.println("mem_addr: "+rs.getString("mem_addr"));
	    		System.out.println();
	    	
	    	}
			
		} catch (SQLException e) {
			// TODO: handle exception
		}finally{
			//자원 반납 : 만들어진 순의 역순으로
			if(stmt!=null) try {
				stmt.close();
			} catch (SQLException e) {
				// TODO: handle exception
			}
			if(rs!=null) try {
				rs.close();
			} catch (SQLException e) {
				// TODO: handle exception
			}
		
	}
		
	}



}

슨생님 정답

package kr.or.ddit.basic;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Scanner;

import kr.or.ddit.util.DBUtil;
import kr.or.ddit.util.DBUtil3;

/*
 	회원을 관리하는 프로그램을 작성하시오. (MYMEMBER 테이블 이용)
 	아래 메뉴의 기능을 모두 구현하시오. (CRUD 기능 구현하기)
 	메뉴예시) 
 	 -- 작업 선택 --
 	 1. 자료추가
 	 2. 자료삭제
 	 3. 자료수정 UPDATE
 	 4. 전체자료출력
 	 0. 작업끝

 	 처리조건)
 	 1) 자료추가에서 '회원ID'는 중복되지 않는다.(중복되면 다시 입력 받는다.)
 	 2) 삭제는 '회원ID'를 입력받아서 처리한다.
 	 3) 자료 수정에서 '회원ID'는 변경되지 않는다.

 	 쓰앵님 정답

 */
public class CopyOfJdbcTest06 {
	static Scanner sc = new Scanner(System.in);
	static Connection conn = null;
	ResultSet rs = null;
	PreparedStatement pstmt = null;
	Statement stmt = null;

	public static void main(String[] args) {
		new CopyOfJdbcTest06().memberStart();

	}

	public void memberStart(){
		while(true){
			int choice = displayMenu();

			switch(choice){
			case 1: insertMember(); break; //추가
			case 2:  deleteMember();break; //삭제
			case 3:  updateMember(); break; //수정 (아이디제외 전체 항목 수정)
			case 4:  displayMember(); break; //전체자료 출력
			case 5 : updateMember2(); break; // (원하는 항목만 수정)
			case 0:  System.out.println("프로그램을 종료합니다."); //종료
			return;
			default : System.out.println("번호를잘못입력했습니다. 다시 입력하세요");

			}
		}
	}

	

	// 회원 정보를 추가하는 메서드
	private void insertMember(){
		Connection conn = null;
		PreparedStatement pstmt = null;

		System.out.println("추가할 회원 정보를 입력하세요");

		int count =0;
		String id = ""; //String memId = null;

		do{
			System.out.println("mem_id를 입력하세요");
			id = sc.nextLine();
			count = getMemberCount(id);
			if(count>0){
				System.out.println(id +  "은(는) 이미 등록된 회원 ID입니다.");
				System.out.println("다른 회원 ID를 입력하세요");

			}
		}while(count>0);

		System.out.println("mem_name를 입력해주세요");
		String name = sc.nextLine();
		System.out.println("mem_pass를 입력해주세요");
		String pass = sc.nextLine();
		System.out.println("mem_tel를 입력해주세요");
		String tel = sc.nextLine();
		System.out.println("mem_addr를 입력해주세요");
		String addr = sc.nextLine();

		try {
			
			conn = DBUtil.getConnection();

			String sql = " insert into MYMEMBER values(? , ? , ? , ? , ?)";
			pstmt = conn.prepareStatement(sql);
			pstmt.setString(1, id);
			pstmt.setString(2, name);
			pstmt.setString(3, pass);
			pstmt.setString(4, tel);
			pstmt.setString(5, addr);

			int cnt = pstmt.executeUpdate();
			System.out.println("반환값: "+ cnt);
			if(cnt>0){
				System.out.println("insert 성공");
			}else{
				System.out.println("insert 실패");
			}

		} catch (SQLException e) {
			e.printStackTrace();
		}finally{
			if(pstmt!=null)try{
				pstmt.close();
			}catch(SQLException e){

			}
			if(conn!=null)try{
				conn.close();
			}catch(SQLException e){

			}

		}
	}

	//회원정보 삭제
	private void deleteMember() {
		Connection conn = null;
		PreparedStatement pstmt = null;
		
		System.out.println();
		System.out.println("삭제할 회원 정보를 입력하세요");
		System.out.println("삭제할 mem_id를 입력해주세요 ");
		String id = sc.nextLine();
		
		try {
			conn = DBUtil.getConnection();
			
			String sql = "delete from mymember where mem_id = ?";
			pstmt = conn.prepareStatement(sql);
					pstmt.setString(1, id);
					
			int cnt = pstmt.executeUpdate();
			System.out.println("반환값: "+ cnt);
			if(cnt>0){
				System.out.println("delete 성공");
			}else{
				System.out.println("delete 실패");
			}
			
		} catch (SQLException e) {
			e.printStackTrace();
		}finally{
			if(pstmt!=null) try {
				pstmt.close();
			} catch (SQLException e) {
				// TODO: handle exception
			}
			if(conn!=null) try {
				conn.close();
			} catch (SQLException e) {
				// TODO: handle exception
			}
		}
			
	}


	// 회원정보 수정
	private void updateMember() {
		Connection conn = null;
		PreparedStatement pstmt = null;
		
		System.out.println("수정할 회원 정보를 입력하세요");
		System.out.println("수정할 회원id: ");
		String id = sc.nextLine();
		
		int count = getMemberCount(id);
		if(count==0){
			System.out.println(id+"는 없는 회원 id");
			return ;
		}
		
		System.out.println("수정할 mem_name를 입력해주세요");
		String name = sc.nextLine();
		System.out.println("수정할 mem_pass를 입력해주세요");
		String pass = sc.nextLine();
		System.out.println("수정할 mem_tel를 입력해주세요");
		String tel = sc.nextLine();
		System.out.println("수정할 mem_addr를 입력해주세요");
		String addr = sc.nextLine();
		
		try {
			conn = DBUtil.getConnection();
			String sql = "update MYMEMBER set mem_name = ?, mem_pass = ?, mem_tel = ?, mem_addr = ? where mem_id = ? ";
			pstmt = conn.prepareStatement(sql);
			pstmt.setString(1, name);
			pstmt.setString(2, pass);
			pstmt.setString(3, tel);
			pstmt.setString(4, addr);
			pstmt.setString(5, id);
			
			int cnt = pstmt.executeUpdate();
			
			if(cnt>0){
				System.out.println("회원 정보 수정 완료");
			}else{
				System.out.println("회원 정보 수정 실패");
			}
			
		} catch (SQLException e) {
			// TODO: handle exception
		}finally{
			if(pstmt!=null) try {
				pstmt.close();
			} catch (SQLException e) {
				// TODO: handle exception
			}
			if(conn!=null) try {
				conn.close();
			} catch (SQLException e) {
				// TODO: handle exception
			}
		}

	}
	

	
	private void updateMember2() {
		Connection conn = null;
		PreparedStatement patmt = null;
		
		System.out.println();
		System.out.println("수정할 회원 정보를 입력하세요");
		System.out.println("수정할 회원 id를 입력하세요");
		String memId = sc.next();
		
		int count = getMemberCount(memId);
		if(count==0){
			System.out.println(memId+"는 없는 회원 id");
			return ;
		}
		
		int num ; // 수정할 컬럼에 대한 선택 값이 저장될 변수
		String updateField = null;
		String updateTitle = null;
		
		do{
			System.out.println();
			System.out.println("수정할 항목을 선택하세요.");
			System.out.println("1.회원이름 2.회원비밀번호 3.회원 전화번호 4.회원주소");
			num = sc.nextInt();
			sc.nextLine();
			
			switch(num){
			case 1: 
					updateField = "mem_name";
					updateTitle = "회원이름";
					break;
			case 2:
					updateField = "mem_pass";
					updateTitle = "비밀번호";
					break;
			case 3:
					updateField = "mem_tel";
					updateTitle = "회원전화번호";
					break;
			case 4:
					updateField = "mem_addr";
					updateTitle = "회원주소";
					break;
			default : 
					System.out.println("수정할 항목을 잘못 선택했습니다.");
					System.out.println("다시 선택하세요");
			}
		}while(num<1 || num>4);
		
		System.out.println("새로운 "+ updateTitle + ":");
		String updateData = sc.nextLine();
		
		try {
			conn = DBUtil.getConnection();
			String sql = "update mymember set " + updateField + "= ? where mem_id = ?";
			pstmt = conn.prepareStatement(sql);
			pstmt.setString(1, updateData);
			pstmt.setString(2, memId);
			
			int cnt = pstmt.executeUpdate();
			
			if(cnt>0){
				System.out.println(updateTitle+ "수정 완료");
			}else{
				System.out.println(updateTitle+ "수정 실패");
			}
			
		} catch (SQLException e) {
			e.printStackTrace();
		}finally{
			if(pstmt!=null) try {
				pstmt.close();
			} catch (SQLException e) {
				// TODO: handle exception
			}
			if(conn!=null) try {
				conn.close();
			} catch (SQLException e) {
				// TODO: handle exception
			}
		}
	
	}
	

	private void displayMember() {
		Connection conn = null;
		Statement stmt = null;
		ResultSet rs = null;

		System.out.println("회원id   회원이름    비밀번호   전화번호                   주소");
		try {
			/*conn = DBUtil.getConnection();*/
			conn = DBUtil3.getConnection();
			/*conn = DBUtil2.getConnection();*/

			String sql = "select * from mymember";
			stmt = conn.createStatement();

			rs= stmt.executeQuery(sql);

			while(rs.next()){

				System.out.print(rs.getString("mem_id") + " \t");
				System.out.print(rs.getString("mem_name")+ " \t");
				System.out.print(rs.getString("mem_pass")+ " \t");
				System.out.print(rs.getString("mem_tel")+ " \t");
				System.out.println(rs.getString("mem_addr")+ " \t");
			}
			

		} catch (SQLException e) {
			e.printStackTrace();
		}finally{
			if(rs!=null)try{
				rs.close();
			}catch(SQLException e){

			}
			if(stmt!=null)try{
				stmt.close();
			}catch(SQLException e){
				
			}
			if(conn!=null)try{
				conn.close();
			}catch(SQLException e){
				
			}
		}


	}


	// 회원 id를 인수값으로 받아서 해당 회원 id의 개수를 반환하는 메서드
	private int getMemberCount(String memId){
		Connection conn = null;
		PreparedStatement pstmt = null;
		ResultSet rs = null;

		int count =0;
		try {
			conn = DBUtil.getConnection();
			String sql = "select count(*) cnt from mymember where mem_id=?";
			pstmt = conn.prepareStatement(sql);
			pstmt.setString(1, memId);

			rs = pstmt.executeQuery();

			if(rs.next()){
				count = rs.getInt("cnt");
			}

		} catch (SQLException e) {
			count = 0;
			e.printStackTrace();

		}finally{
			if(rs!=null)try{
				rs.close();
			}catch(SQLException e){

			}
			if(pstmt!=null)try{
				pstmt.close();
			}catch(SQLException e){

			}
			if(conn!=null)try{
				conn.close();
			}catch(SQLException e){

			}
		}

		return count;
	}



	private int displayMenu() {
		System.out.println("==작업선택==");
		System.out.println("1.자료추가 2.자료삭제 3.자료수정4.전체자료출력 5. 자료수정2 0.작업끝");
		System.out.print("선택>");

		int input=sc.nextInt(); 
			sc.nextLine();

		return input;
	}





}
profile
삐약..뺙뺙

0개의 댓글