관리 메뉴

거니의 velog

230914_JDBC 2 본문

대덕인재개발원_자바기반 애플리케이션

230914_JDBC 2

Unlimited00 2023. 9. 14. 12:47

[jdbcTest05_2.java]

package kr.or.ddit.basic;

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

/*
 * LPROD 테이블에 새로운 데이터를 추가한다.
 * 
 * 조건) lprod_gu값과 lprod_nm값은 직접 입력 받아서 처리하고,
 * 		lprod_id값은 현재의 lprod_id값 중에서 제일 큰 값보다 1 크게 한다.
 * 		입력 받은 lprod_gu값이 이미 등록되어 있으면 다시 입력 받아 처리한다.
 * 
 * select * from lprod
 * select max(lprod_id) from lprod
 * select count(*) from lprod where lprod_gu = 'P101' -- 반환값 : 1이면 있고, 0이면 없다.
 * INSERT INTO lprod (lprod_id, lprod_gu, lprod_nm) VALUES ( ?, ?, ? )
 */
public class jdbcTest05_2 {

	public static void main(String[] args) {
		
		Scanner scan = new Scanner(System.in);
		
		Connection conn = null;
		PreparedStatement pstmt = null;
		ResultSet rs = null;
		
		String url = "jdbc:oracle:thin:@localhost:1521:xe";
		String user = "pc_09";
		String password = "java";
		
		try {
			Class.forName("oracle.jdbc.driver.OracleDriver");
			
			conn = DriverManager.getConnection(url, user, password);
			
			// lprod_id값 구하기 ==> 현재의 lprod_id값 중 제일 큰 값보다 1 큰 값으로 한다.
			
			String sql = " select nvl(max(lprod_id), 0) as maxid from lprod ";
			pstmt = conn.prepareStatement(sql);
			
			rs = pstmt.executeQuery();
			int maxid = 0;
			if(rs.next()) {
				maxid = rs.getInt(1); // 컬럼 번호 이용
//				maxid = rs.getInt("maxid"); // alias명 이용
			}
			maxid++; // 제일 큰 값 증가하기
			
			//------------------------------------------------------------
			
			// 입력 받은 lprod_gu값이 이미 등록되어 있으면 다시 입력 받아 처리한다.
			String gu; // 상품 분류 코드가 저장될 변수 선언
			int count = 0; // 검색한 상품 분류 코드의 개수가 저장될 변수 선언
			
			String sql2 = " select count(*) as cnt from lprod where lprod_gu = ? ";
			pstmt = conn.prepareStatement(sql2);
			
			do {
				System.out.print("상품 분류 코드(LPROD_GU) 입력 >> ");
				gu = scan.next();
				
				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.print("상품 분류명(LPROD_NM) 입력 >> ");
			String nm = scan.next();
			
			//------------------------------------------------------------
			
			String sql3 = " insert into lprod (lprod_id, lprod_gu, lprod_nm) values (?, ?, ?) ";
			pstmt = conn.prepareStatement(sql3);
			pstmt.setInt(1, maxid);
			pstmt.setString(2, gu);
			pstmt.setString(3, nm);
			
			int cnt = pstmt.executeUpdate();
			
			if(cnt > 0) {
				System.out.println("insert 성공!!!");
			}else {
				System.out.println("insert 실패~~~");
			}
			
		} catch (SQLException e) {
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			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) {}
		}
		
	}

}


[DBUtil.java]

package kr.or.ddit.util;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

// JDBC드라이버를 로딩하고 
// Connection객체를 생성해서 반환하는 메서드로 구성된 class
public class DBUtil {
	
	static {
		try {
			Class.forName("oracle.jdbc.driver.OracleDriver");
		} catch (ClassNotFoundException e) {
			System.out.println("드라이버 로딩 실패~~~");
			e.printStackTrace();
		}
	}
	
	public static Connection getConnection() {
		
		Connection conn = null;
		
		String url = "jdbc:oracle:thin:@localhost:1521:xe";
		String user = "pc_09";
		String password = "java";
		
		try {
			conn = DriverManager.getConnection(url, user, password);
		} catch (SQLException e) {
			System.out.println("DB 연결 실패~~~");
			e.printStackTrace();
		}
		return conn;
		
	}

}

[jdbcTest05_2.java]

package kr.or.ddit.basic;

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

import kr.or.ddit.util.DBUtil;

/*
 * LPROD 테이블에 새로운 데이터를 추가한다.
 * 
 * 조건) lprod_gu값과 lprod_nm값은 직접 입력 받아서 처리하고,
 * 		lprod_id값은 현재의 lprod_id값 중에서 제일 큰 값보다 1 크게 한다.
 * 		입력 받은 lprod_gu값이 이미 등록되어 있으면 다시 입력 받아 처리한다.
 * 
 * select * from lprod order by lprod_id
 * select max(lprod_id) from lprod
 * select count(*) from lprod where lprod_gu = 'P101' -- 반환값 : 1이면 있고, 0이면 없다.
 * INSERT INTO lprod (lprod_id, lprod_gu, lprod_nm) VALUES ( ?, ?, ? )
 */
public class jdbcTest05_2 {

	public static void main(String[] args) {
		
		Scanner scan = new Scanner(System.in);
		
		Connection conn = null;
		PreparedStatement pstmt = null;
		ResultSet rs = null;
		
		try {
        
			conn = DBUtil.getConnection();
			
			// lprod_id값 구하기 ==> 현재의 lprod_id값 중 제일 큰 값보다 1 큰 값으로 한다.
			
			String sql = " select nvl(max(lprod_id), 0) as maxid from lprod ";
			pstmt = conn.prepareStatement(sql);
			
			rs = pstmt.executeQuery();
			int maxid = 0;
			if(rs.next()) {
				maxid = rs.getInt(1); // 컬럼 번호 이용
//				maxid = rs.getInt("maxid"); // alias명 이용
			}
			maxid++; // 제일 큰 값 증가하기
			
			//------------------------------------------------------------
			
			// 입력 받은 lprod_gu값이 이미 등록되어 있으면 다시 입력 받아 처리한다.
			String gu; // 상품 분류 코드가 저장될 변수 선언
			int count = 0; // 검색한 상품 분류 코드의 개수가 저장될 변수 선언
			
			String sql2 = " select count(*) as cnt from lprod where lprod_gu = ? ";
			pstmt = conn.prepareStatement(sql2);
			
			do {
				System.out.print("상품 분류 코드(LPROD_GU) 입력 >> ");
				gu = scan.next();
				
				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.print("상품 분류명(LPROD_NM) 입력 >> ");
			String nm = scan.next();
			
			//------------------------------------------------------------
			
			String sql3 = " insert into lprod (lprod_id, lprod_gu, lprod_nm) values (?, ?, ?) ";
			pstmt = conn.prepareStatement(sql3);
			pstmt.setInt(1, maxid);
			pstmt.setString(2, gu);
			pstmt.setString(3, nm);
			
			int cnt = pstmt.executeUpdate();
			
			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) {}
			if(pstmt != null) try { pstmt.close(); } catch (SQLException e) {}
			if(conn != null) try { conn.close(); } catch (SQLException e) {}
		}
		
	}

}


-- 회원 관리 테이블
create table mymember(
    mem_id varchar2(20) not null, -- 회원 ID
    mem_pass varchar2(50) not null, -- 비밀번호
    mem_name varchar2(30) not null, -- 회원이름
    mem_tel varchar2(14) not null, -- 전화번호
    mem_addr varchar2(90) not null, -- 주소
    constraint pk_mymember primary key (mem_id)
);

[jdbcTest06.java]

package kr.or.ddit.basic;

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

import kr.or.ddit.util.DBUtil;

/*
 * 회원 관리를 하는 프로그램을 작성하시오.
 * (MYMEMBER 테이블 이용)
 * 
 * 아래의 메뉴를 구성하고 각 메뉴의 기능을 구현하시오. (CRUD 기능 구현하기)
 * 메뉴예시)
 * == 작업 선택 ==
 * 1. 자료 추가		==> Create (insert문)
 * 2. 자료 삭제		==> Delete (delete문)
 * 3. 자료 수정		==> Update (update문)
 * 4. 전체 자료 출력        ==> Read   (select문)
 * 0. 작업 끝.
 * ------------
 * 
 * 조건) 
 * 1) 자료 추가에서 '회원ID'는 중복되지 않는다. (중복되면 다시 입력 받는다.)
 * 2) 자료 삭제는 '회원ID'를 입력 받아서 처리한다.
 * 3) 자료 수정에서 '회원ID'는 변경되지 않는다.
 * 
 * MEM_ID	VARCHAR2(20 BYTE)
 * MEM_PASS	VARCHAR2(50 BYTE)
 * MEM_NAME	VARCHAR2(30 BYTE)
 * MEM_TEL	VARCHAR2(14 BYTE)
 * MEM_ADDR	VARCHAR2(90 BYTE)
 * 
 */
public class jdbcTest06 {

	Scanner scan = new Scanner(System.in);
	
	Connection conn = null;
	PreparedStatement pstmt = null;
	ResultSet rs = null;
	
	public static void main(String[] args) {
		
		new jdbcTest06().memStart();
		
	}
	
	public int menuList() {
		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 choice = Integer.parseInt(scan.nextLine());
		return choice;
	}
	
	public void memStart() {
		while(true) {
			int choice = menuList();
			switch(choice) {
			case 1: // Create (insert문)
				memCreate();
				break;
			case 2: // Delete (delete문)
				memDelete();
				break;
			case 3: // Update (update문)
				memUpdate();
				break;
			case 4: // Read   (select문)
				memAllRead();
				break;
			case 0:
				System.out.println("프로그램을 종료합니다...");
				System.exit(0);
			default:
				System.out.println("작업 번호를 잘못 입력하셨습니다.");
				System.out.println("다시 선택해 주세요...");
				System.out.println();
			}
		}
	}
	
	// 자료 추가
	private void memCreate() {
		try {
			conn = DBUtil.getConnection();
			System.out.println();
			System.out.println("새롭게 추가할 자료를 입력하세요.");
			
			String memId = null;
			int cnt = 0;
			do {
				System.out.println("새로 등록하실 회원 ID를 입력하세요...");
				System.out.print("MEM_ID >> ");
				memId = scan.nextLine();
				
				String sql = " select count(*) as cnt from mymember where mem_id = ? ";
				pstmt = conn.prepareStatement(sql);
				pstmt.setString(1, memId);
				rs = pstmt.executeQuery();
				
				if(rs.next()) {
					cnt = rs.getInt("cnt");
				}
				if(cnt > 0) {
					System.out.println("이미 있는 회원 아이디 입니다.");
					System.out.println("다시 입력해 주세요...");
					System.out.println();
				}
				
			}while(cnt > 0);
			
			System.out.println("새로 등록하실 회원 비밀번호를 입력하세요...");
			System.out.print("MEM_PASS >> ");
			String memPass = scan.nextLine();
			
			System.out.println("새로 등록하실 회원 이름을 입력하세요...");
			System.out.print("MEM_NAME >> ");
			String memName = scan.nextLine();
			
			System.out.println("새로 등록하실 회원 전화번호를 입력하세요...");
			System.out.print("MEM_TEL >> ");
			String memTel = scan.nextLine();
			
			System.out.println("새로 등록하실 회원 주소를 입력하세요...");
			System.out.print("MEM_ADDR >> ");
			String memAddr = scan.nextLine();
			
			String sql2 = " insert into mymember values (?, ?, ?, ?, ?) ";
			pstmt = conn.prepareStatement(sql2);
			pstmt.setString(1, memId);
			pstmt.setString(2, memPass);
			pstmt.setString(3, memName);
			pstmt.setString(4, memTel);
			pstmt.setString(5, memAddr);
			
			int result = pstmt.executeUpdate();
			
			if(result > 0) {
				System.out.println();
				System.out.println("회원 정보 저장 완료!!!");
				System.out.println();
			}else {
				System.out.println();
				System.out.println("회원 정보 저장 실패~~~");
				System.out.println();
			}
			
		} catch (SQLException e) {
			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) {}
		}
	}
	
	// 자료 삭제
	private void memDelete() {
		try {
			conn = DBUtil.getConnection();
			
			System.out.println();
			System.out.print("삭제할 아이디를 입력하세요 >> ");
			String delId = scan.nextLine();
			
			String sql = " delete from mymember where mem_id = ? ";
			
			pstmt = conn.prepareStatement(sql);
			pstmt.setString(1, delId);
			int result = pstmt.executeUpdate();
			
			if(result > 0) {
				System.out.println();
				System.out.println("회원 정보 삭제 완료!!!");
				System.out.println();
			}else {
				System.out.println();
				System.out.println("해당 회원 아이디 [" + delId + "]를 찾을 수 없습니다.");
				System.out.println("회원 정보 삭제 실패~~~");
				System.out.println();
			}
			
		} catch (SQLException e) {
			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) {}
		}
	}
	
	// 자료 수정
	private void memUpdate() {
		try {
			conn = DBUtil.getConnection();
			
			String updateID = null;
			int cnt = 0;
			do {
				System.out.print("수정하실 회원 ID를 입력하세요 >>");
				updateID = scan.nextLine();
				String sql = " select count(*) as cnt from mymember where mem_id = ? ";
				pstmt = conn.prepareStatement(sql);
				pstmt.setString(1, updateID);
				rs = pstmt.executeQuery();
				
				if(rs.next()) {
					cnt = rs.getInt("cnt");
				}
				if(cnt < 1) {
					System.out.println("수정하실 회원 ID가 없습니다.");
					System.out.println("다시 입력해 주세요...");
					System.out.println();
				}
				
			}while(cnt < 1);
			
			System.out.println("변경할 비밀번호를 입력하세요...");
			System.out.print("MEM_PASS >> ");
			String updatePw = scan.nextLine();
			
			System.out.println("변경할 이름을 입력하세요...");
			System.out.print("MEM_NAME >> ");
			String updateNm = scan.nextLine();
			
			System.out.println("변경할 연락처를 입력하세요...");
			System.out.print("MEM_TEL >> ");
			String updateTel = scan.nextLine();
			
			System.out.println("변경할 주소를 입력하세요...");
			System.out.print("MEM_ADDR >> ");
			String updateAddr = scan.nextLine();
			
			String sql2 = " update mymember set mem_pass = ?, mem_name = ?, mem_tel = ?, mem_addr = ? where mem_id = ? ";
			pstmt = conn.prepareStatement(sql2);
			pstmt.setString(1, updatePw);
			pstmt.setString(2, updateNm);
			pstmt.setString(3, updateTel);
			pstmt.setString(4, updateAddr);
			pstmt.setString(5, updateID);
			
			int result = pstmt.executeUpdate();
			
			if(result > 0) {
				System.out.println("회원 정보 수정 완료!!!");
			}else {
				System.out.println("회원 정보 수정 실패~~~");
			}
			
		} catch (SQLException e) {
			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) {}
		}
	}
	
	// 전체 자료 출력
	private void memAllRead() {
		try {
			conn = DBUtil.getConnection();
			
			System.out.println();
			System.out.println("=== 전체 자료 출력 ===");
			String sql = " select * from mymember ";
			pstmt = conn.prepareStatement(sql);
			rs = pstmt.executeQuery();
			System.out.println("--------------------------------");
			while(rs.next()) {
				System.out.println("MEM_ID : " + rs.getString("mem_id"));
				System.out.println("MEM_PASS : " + rs.getString("mem_pass"));
				System.out.println("MEM_NAME : " + rs.getString("mem_name"));
				System.out.println("MEM_TEL : " + rs.getString("mem_tel"));
				System.out.println("MEM_ADDR : " + rs.getString("mem_addr"));
				System.out.println("--------------------------------");
			}
			System.out.println();
			
		} catch (SQLException e) {
			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) {}
		}
	}

}


 

'대덕인재개발원_자바기반 애플리케이션' 카테고리의 다른 글

230918_MVC 1  (0) 2023.09.15
230915_JDBC 2  (0) 2023.09.15
230913_JDBC 1  (0) 2023.09.12
230912_입출력 6  (0) 2023.09.11
230911_입출력 5  (0) 2023.09.11