고급JAVA 17강 - JDBC

Whatever·2021년 11월 19일
0

고급 JAVA

목록 보기
17/32

JDBC

PreparedStatement 이용

  • Statement => 실행할때마다 컴파일
  • PreparedStatement => 미리 컴파일을 해놓는다.
  • 일반적으로는 PreparedStatement를 사용

MVC패턴 - 조사해서 레포트로 제출

DBUtil

public class DBUtil {
	// static 초기화 블럭 - 왜 초기화블럭에서 실행할까?
	static {
		try {
			Class.forName("oracle.jdbc.driver.OracleDriver");
		} catch (ClassNotFoundException e) {
			System.out.println("드라이버 로딩 실패~~~");
			e.printStackTrace();
		}
		
	}
	
	public static Connection getConnection() {
		try {
			return DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe", 
                        "JYJ94", "java");
		} catch (SQLException e) {
			System.out.println("오라클 연결 실패!!!");
			return null;
		}
	}

}

계좌번호 선생님 답

/* 
				선생님 답
				
				int count = 0;
				do{
					System.out.print("계좌번호 : ");
					bankNo = scan.next();
					String sql2 = "select count(*) cnt from bankinfo " + " where bank_no = ?";
					pstmt2 = conn.prepareStatement(sql2);
					pstmt2.setString(1, bankNo);
					
					rs = pstmt2.executeQuery();
					
					if(rs.next){ // select문의 결과가 1개의 레코드일 경우 if문 사용가능
						// count = rs.getInt(1);
						count = rs.getInt("cnt"); // 컬럼의 alias로 설정하기
					}
					if(count>0){
						System.out.println(bankNo + " 계좌번호는 이미 있는 번호입니다.");
						System.out.println("다시 입력하세요");
						System.out.println();
						
					}
					
				}while(count>0);
				
				
				
			 */

JdbcTest05

public class JdbcTest05 {

	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		
		Connection conn = null;
		PreparedStatement pstmt = null;
		PreparedStatement pstmt2 = null;
		ResultSet rs = null;
		
		try {
//			Class.forName("oracle.jdbc.driver.OracleDriver");
//			conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe", "JYJ94", "java");
			
			conn = DBUtil.getConnection();
			
			String gu;
			int count = 0;
			do {
				
				System.out.println("lprod_gu값을 입력");
				gu = scan.next();
				
				String sql2 = "select count(*) cnt from lprod where lprod_gu = ?";
	
				pstmt = conn.prepareStatement(sql2);
				pstmt.setString(1, gu);
				rs = pstmt.executeQuery();
				
				if(rs.next()) {
					count = rs.getInt("cnt");
				}
				
				if(count>0){
					System.out.println(gu + "는 이미 있는 번호입니다.");
					System.out.println("다시 입력하세요");
					System.out.println();
					
				}
				
					
			}while(count > 0);

			System.out.println("lprod_nm값을 입력");
			String nm = scan.next();
			
			String sql = "insert into lprod values( NVL((Select MAX(lprod_id) from lprod),0) + 1,?,?)";
			pstmt2 = conn.prepareStatement(sql);
			pstmt2.setString(1, gu);
			pstmt2.setString(2, nm);
			
			int result = pstmt2.executeUpdate();
			
			if(result > 0) {
				System.out.println("정상적으로 등록되었습니다.");
			}
			
		} catch (SQLException e) {
			// TODO: handle exception
//		} catch (ClassNotFoundException e) {
//			// TODO Auto-generated catch block
//			e.printStackTrace();
		}finally {
			if(rs!=null)try {rs.close();} catch (Exception e) {	}
			if(pstmt!=null)try {pstmt.close();} catch (Exception e) {	}
			if(conn!=null)try {conn.close();} catch (Exception e) {	}
		}
		/*
		  선생님 답
		  
		  입력받은 lprod_gu가 이미 등록되어 있으면 다시 입력 받아서 처리한다.
		  String gu = null; // 상품 분류 코드가 저장될 변수 선언
		  int count = 0; // 입력한 '상품 분류 코드'의 개수가 저장될 변수 선언
		  do{
		  	System.out.println("상품 분류 코드(LPROD_GU) 입력:");
		  	gu = scan.next();
		  	
		  	String sql2 = "select count(*) from lprod where lprod_gu = ?";
		  	pstmt = conn.preparedStatement(sql2);
		  	pstmt = setString(1, gu);
		  	
		  	rs = pstmt.executeQuery();
		  	
		  	if(rs.next()){
		  		count = rs.getInt("cnt");
		  	}
		  	
		  	if(count > 0){
		  		System.out.println("입력한 상품 분류 코드 " + gu + "는(은) 이미 등록된 코드입니다.");
		  		System.out.println("다시 입력하세요");
		  		
		  	}
		  }while(count > 0);		  
		  
		  
		  System.out.println("상품 분류명 (LPROD_NM) 입력 : ");
		  String nm = " scan.next();
		  
		  String sql3 = "insert into lprod(lprod_id, lprod_gu, lprod_nm) 
		  					values(?,?,?)";
		  pstmt2 = conn.prepareStatement(sql2);
		  pstmt2.setInt(1, maxNum);					
		  pstmt2.setInt(2, gu);					
		  pstmt2.setInt(3, nm);					
		  					
		  int cnt = pstmt2.executeUpdate();
		  
		  if(cnt>0){
		  	System.out.println("등록 성공~~~");
		  }else{
		  	System.out.println("등록 실패!!!");
		  }
		  
		 */
		
	}

}

JdbcTest06

public class JdbcTest06 {
	Scanner scan = new Scanner(System.in);
	Connection conn = DBUtil.getConnection();;
	PreparedStatement pstmt;
	ResultSet rs;
	
	public static void main(String[] args) {
		
		new JdbcTest06().start();

	}
	
	private void start() {
		while(true) {
			
			System.out.println("== 작업 선택 ==");
			System.out.println("1. 자료 추가");
			System.out.println("2. 자료 삭제");
			System.out.println("3. 자료 수정");
			System.out.println("4. 전체 자료 출력");
			System.out.println("0. 작업 끝");
			System.out.println("=============");
			System.out.print("선택 >");
			
			int input = scan.nextInt();
			switch(input) {
			case 1: insert(); break;
			case 2: delete(); break;
			case 3: update(); break;
			case 4: read(); break;
			case 0:
				System.out.println("작업을 종료합니다.");
				System.exit(0);
			}
		}
		
	}

	//등록
	private void insert() {
		//  MEM_ID / MEM_NAME / MEM_PASS / MEM_TEL / MEM_ADDR
	
		System.out.println("회원정보를 등록합니다.");
		int count = 0; 
		String userId;
		
		do {
			System.out.println("아이디 입력");
			userId = scan.next();
			
			String sql = "select count(*) cnt from mymember where mem_id = ?";
		
			try {
				pstmt = conn.prepareStatement(sql);
				pstmt.setString(1, userId);
				rs = pstmt.executeQuery();
				
				//자료 검증
				if(rs.next()) {
					count = rs.getInt("cnt");
				}
				
				if(count > 0) {
					System.out.println("중복되는 아이디입니다.");
					System.out.println("다시 입력해주세요.");
				}
				
			} catch (SQLException e) {
				System.out.println("아이디 검색 실패!!");
				e.printStackTrace();
			}finally {
				if(rs!=null)try{rs.close();}catch(SQLException e) {}
				if(pstmt!=null)try{pstmt.close();}catch(SQLException e) {}
			}
		}while(count > 0);
		
		System.out.println("이름 입력");
		String userName = scan.next();
		
		System.out.println("비밀번호 입력");
		String Password = scan.next();
		
		System.out.println("전화번호 입력");
		String userTel = scan.next();
		
		scan.nextLine();
		System.out.println("주소 입력");
		String userAddr = scan.nextLine();
		
		try {
			String sql = "insert into mymember values(?,?,?,?,?)";
			pstmt = conn.prepareStatement(sql);
			pstmt.setString(1, userId);
			pstmt.setString(2, userName);
			pstmt.setString(3, Password);
			pstmt.setString(4, userTel);
			pstmt.setString(5, userAddr);
			
			int result = pstmt.executeUpdate();
			
			if(result > 0) {
				System.out.println("회원 등록에 성공했습니다!");	
			}else {
				System.out.println("회원 등록에 실패했습니다.");
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally {
			if(pstmt!=null)try{pstmt.close();}catch(SQLException e) {}
			
		}
		
		
	}

	//삭제
	private void delete() {
		// MEM_ID / MEM_NAME / MEM_PASS / MEM_TEL / MEM_ADDR
		//삭제할 아이디 검색
		System.out.println("삭제할 아이디를 입력해주세요");
		String userId = scan.next();
		
		//정말 삭제할건지 물어보기
		System.out.println("정말 삭제하시겠습니까?");
		System.out.println("1.예 2.아니오");
		int input = scan.nextInt();
		switch(input) {
		case 1: break;
		case 2: return;
		default: return;
		}
		
		//삭제할 sql
		String sql = "delete mymember where mem_id = ?";
		try {
			//sql문 실행
			pstmt = conn.prepareStatement(sql);
			pstmt.setString(1, userId);
			int result = pstmt.executeUpdate();
			
			//삭제(delete)
			if(result > 0) {
				System.out.println("정상적으로 삭제되었습니다.");
			}else {
				System.out.println("삭제에 실패했습니다.");
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally {
			if(pstmt!=null) try{pstmt.close();}catch(Exception e) {} 
		}
		
	}

	//수정
	private void update() {
		//  MEM_ID / MEM_NAME / MEM_PASS / MEM_TEL / MEM_ADDR
		//수정할 아이디 검색
		System.out.println("수정할 아이디를 입력해주세요");
		String userId = scan.next();
		
		//정말 수정할건지 물어보기
		System.out.println("정말 수정하시겠습니까?");
		System.out.println("1.예 2.아니오");
		int input = scan.nextInt();
		switch(input) {
			case 1: break;
			case 2: return;
			default: return;
		}
		
		//수정할 정보 입력받기
		System.out.println("수정할 이름 입력");
		String userName = scan.next();
		
		System.out.println("수정할 비밀번호 입력");
		String Password = scan.next();
		
		System.out.println("수정할 전화번호 입력");
		String userTel = scan.next();
		
		scan.nextLine();
		System.out.println("수정할 주소 입력");
		String userAddr = scan.nextLine();
		//수정할 부분 모두
		String sql = "update mymember set MEM_NAME =?, MEM_PASS =?, MEM_TEL=?, MEM_ADDR=? where MEM_ID=?";
		try {
			pstmt = conn.prepareStatement(sql);
			pstmt.setString(1, userName);
			pstmt.setString(2, Password);
			pstmt.setString(3, userTel);
			pstmt.setString(4, userAddr);
			pstmt.setString(5, userId);
			
			int result = pstmt.executeUpdate();
			
			if(result > 0) {
				System.out.println("정상적으로 수정되었습니다.");
			}else {
				System.out.println("수정에 실패했습니다.");
			}
			
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally {
			if(pstmt!=null) try{pstmt.close();}catch(Exception e) {} 
		}
		
		//수정 완료
		
	}

	//읽어오기
	private void read() {
		//  MEM_ID / MEM_NAME / MEM_PASS / MEM_TEL / MEM_ADDR
		//select문
		String sql = "select * from mymember";
		try {
			pstmt = conn.prepareStatement(sql);
			rs = pstmt.executeQuery();
			
			System.out.println(" == 회원정보 ==");
			while(rs.next()) {
				System.out.println("아이디 : " + rs.getString(1));
				System.out.println("이름 : " + rs.getString(2));
				System.out.println("비밀번호 : " + rs.getString(3));
				System.out.println("전화번호 : " + rs.getString(4));
				System.out.println("주소 : " + rs.getString(5));
				System.out.println("=============================");
			}
			
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally {
			if(rs!=null) try{rs.close();}catch(Exception e) {}
			if(pstmt!=null) try{pstmt.close();}catch(Exception e) {}
			
		}
		
	}

}

0개의 댓글