관리 메뉴

거니의 velog

230913_JDBC 1 본문

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

230913_JDBC 1

Unlimited00 2023. 9. 12. 17:27


[jdbcTest01.java]

package kr.or.ddit.basic;

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

// JDBC(Java DataBase Connectivity) 라이브러리를 이용한 DB자료 처리하기

public class jdbcTest01 {

	/*
	 * [JDBC를 이용한 데이터베이스 처리 순서]
	 * 
	 * 1. 드라이버 로딩 ==> 라이브러리를 사용할 수 있도록 메모리로 읽어들이는 작업
	 * 		Class.forName("oracle.jdbc.driver.OracleDriver");
	 * 		==> JDBC버전 4.0이상에서는 DriverManager객체의 getConnection()메서드에서
	 * 			자동으로 로딩해 주기 때문에 생략할 수 있다.
	 * 		(그렇지만 수업에는 이것을 생략하지 않고 사용할 예정임)
	 * 
	 * 2. DB시스템에 접속하기 ==> 접속이 완료되면 Connection객체가 반환된다.
	 * 		DriverManager.getConnection()메서드를 이용한다.
	 * 
	 * 3. 질의 ==> SQL문장을 DB서버로 보내서 결과를 얻어온다.
	 * 		(Statement객체 또는 PreparedStatement객체를 이용하여 작업한다.)
	 * 
	 * 4. 결과 처리 ==> 질의 결과를 받아서 원하는 작업을 수행한다.
	 * 		1) SQL문이 select문일 경우에는 select한 결과가 ResultSet객체에 저장되어 반환된다.
	 * 		2) SQL문이 select문이 아닐 경우(insert문, update문, delete문)에는 정수값이 반환된다.
	 * 			(이 정수값은 보통 실행에 성공한 레코드 수를 의미한다.)
	 * 
	 * 5. 사용한 자원 반납하기 ==> 각 객체의 close()메서드 이용
	 */
	
	public static void main(String[] args) {
		
		// DB작업에 필요한 객체 변수 선언
		Connection conn = null;
		Statement stmt = null;
		ResultSet rs = null;
		
//		String url = "jdbc:oracle:thin:@서버주소:1521:xe";
		
		String url = "jdbc:oracle:thin:@localhost:1521:xe";
		String user = "pc_09";
		String password = "java";
		
		try {
			// 1. 드라이버 로딩
			Class.forName("oracle.jdbc.driver.OracleDriver");
			
			// 2. DB시스템에 연결하기
			conn = DriverManager.getConnection(url, user, password);
			
			// 3. 질의
			
			// 3-1. SQL문 작성 ==> 문자열로 작성
			String sql = "select * from lprod";
			
			// 3-2. Statement객체 생성 ==> 질의를 수행하는 객체 생성
			//		==> Connection객체를 이용해서 생성한다.
			stmt = conn.createStatement();
			
			// 3-3. SQL문을 DB서버로 보내서 결과를 얻어온다.
			//		(Statement객체나 PreparedStatement객체 이용)
			// 		==> (지금은 실행할 SQL문이 select문이기 때문에 결과가 ResultSet객체에 저장되어 반환된다.)
			rs = stmt.executeQuery(sql);
			
			// 4. 결과 처리하기 ==> 가져온 결과를 화면에 한 레코드씩 출력해 보기
			
			// ResultSet객체에 저장된 데이터를 차례로 꺼내오려면 
			// 반복문과 ResultSet객체의 next()메서드를 이용한다.
			
			// 테이블의 레코드 데이터를 가리키는 포인터가 있음.
			// 맨 처음에는 첫 레코드 위를 가리킴.
			// 그러다가 rs.next()하면 이 포인터를 다음 칸으로 이동시키는 것이 rs.next()메서드가 하는 일.
			// 이동만 하지 않고 이 자리에 데이터가 있으면 true를 반환. 없으면 false를 반환
			
			System.out.println(" == 쿼리문 실행 결과 ==");
			
			// ResultSet객체의 next()메서드 
			// 				==> ResultSet객체에 저장된 데이터를 가리키는 포인터를 
			//				==> 다음 번째의 레코드 위치로 이동시키고 
			//				==> 그 곳에 데이터가 있으면 true, 없으면 false를 반환한다.
			System.out.println("-----------------------------------------------");
			while(rs.next()) {
				// ResultSet객체의 포인터가 가리키는 곳의 데이터를 가져오는 방법
				// 형식1) ResultSet객체.get자료형이름("컬럼명 또는 alias명")
				// 형식2) ResultSet객체.get자료형이름(컬럼번호) ==> 컬럼번호는 1번부터 시작
				System.out.print("LPROD_ID : " + rs.getInt("lprod_id") + ", ");
				System.out.print("LPROD_GU : " + rs.getString("lprod_gu") + ", ");
				System.out.println("LPROD_NM : " + rs.getString("lprod_nm"));
				System.out.println("-----------------------------------------------");
			}
			System.out.println("출력 작업 끝...");
			
		} catch (SQLException e) {
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} finally {
			// 5. 사용했던 자원 반납 ==> 보통 객체가 생성된 순서의 역순으로 닫아준다.
			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) {}
		}
		
	}

}


[jdbcTest02.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_ID값을 입력 받아 
//      LPROD_ID가 입력한 값보다 큰 자료들을 출력하시오.

public class jdbcTest02 {

	public static void main(String[] args) {
		
		Scanner scan = new Scanner(System.in);
		
		System.out.println("입력한 LPROD_ID를 초과하는 데이터 검색");
		System.out.print("LPROD_ID를 입력하세요 >> ");
		int lprodId = Integer.parseInt(scan.nextLine());
		
		// DB작업에 필요한 객체 변수 선언
		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 {
			// 1. 드라이버 로딩
			Class.forName("oracle.jdbc.driver.OracleDriver");
			
			// 2. DB시스템에 연결하기
			conn = DriverManager.getConnection(url, user, password);
			
			// 3-1. SQL문 작성 ==> 문자열로 작성
			String sql = "select * from lprod where lprod_id > ? ";
			
			// 3-2. PreparedStatement객체 생성 ==> 질의를 수행하는 객체 생성
			pstmt = conn.prepareStatement(sql);
			
			// 3-3. SQL문을 DB서버로 보내서 결과를 얻어온다.
			pstmt.setObject(1, lprodId);
			rs = pstmt.executeQuery();
			
			// 4. 결과 처리하기 ==> 가져온 결과를 화면에 한 레코드씩 출력해 보기
			System.out.println(" == 쿼리문 실행 결과 ==");
			System.out.println("-----------------------------------------------");
			while(rs.next()) {
				System.out.print("LPROD_ID : " + rs.getInt("lprod_id") + ", ");
				System.out.print("LPROD_GU : " + rs.getString("lprod_gu") + ", ");
				System.out.println("LPROD_NM : " + rs.getString("lprod_nm"));
				System.out.println("-----------------------------------------------");
			}
			System.out.println("출력 작업 끝...");
			
		} catch (SQLException e) {
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} finally {
			// 5. 사용했던 자원 반납 ==> 보통 객체가 생성된 순서의 역순으로 닫아준다.
			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) {}
		}
		
	}

}


[jdbcTest02_2.java]

package kr.or.ddit.basic;

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

// 문제) 사용자로부터 LPROD_ID값을 입력 받아 
//      LPROD_ID가 입력한 값보다 큰 자료들을 출력하시오.

public class jdbcTest02_2 {

	public static void main(String[] args) {
		
		Scanner scan = new Scanner(System.in);
		
		System.out.println("입력한 LPROD_ID를 초과하는 데이터 검색");
		System.out.print("LPROD_ID를 입력하세요 >> ");
		int lprodId = Integer.parseInt(scan.nextLine());
		
		// DB작업에 필요한 객체 변수 선언
		Connection conn = null;
		Statement stmt = null;
		ResultSet rs = null;
		
		String url = "jdbc:oracle:thin:@localhost:1521:xe";
		String user = "pc_09";
		String password = "java";
		
		try {
			// 1. 드라이버 로딩
			Class.forName("oracle.jdbc.driver.OracleDriver");
			
			// 2. DB시스템에 연결하기
			conn = DriverManager.getConnection(url, user, password);
			
			// 3-1. SQL문 작성 ==> 문자열로 작성
//			String sql = "select lprod_id, lprod_gu, lprod_nm from lprod where lprod_id > " + lprodId;
			String sql = "select lprod_id as id, lprod_gu as gu, lprod_nm as nm from lprod where lprod_id > " + lprodId;
			
			// 3-2. PreparedStatement객체 생성 ==> 질의를 수행하는 객체 생성
			stmt = conn.createStatement();
			
			// 3-3. SQL문을 DB서버로 보내서 결과를 얻어온다.
			rs = stmt.executeQuery(sql);
			
			// 4. 결과 처리하기 ==> 가져온 결과를 화면에 한 레코드씩 출력해 보기
			System.out.println(" == 쿼리문 실행 결과 ==");
			System.out.println("-----------------------------------------------");
			while(rs.next()) {
				
//				System.out.print("LPROD_ID : " + rs.getInt(1) + ", ");
//				System.out.print("LPROD_GU : " + rs.getString(2) + ", ");
//				System.out.println("LPROD_NM : " + rs.getString(3));
				
				System.out.print("LPROD_ID : " + rs.getInt("id") + ", ");
				System.out.print("LPROD_GU : " + rs.getString("gu") + ", ");
				System.out.println("LPROD_NM : " + rs.getString("nm")); // alias가 있으면 반드시 alias명을 써야 한다.
				
				System.out.println("-----------------------------------------------");
			}
			System.out.println("출력 작업 끝...");
			
		} catch (SQLException e) {
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} finally {
			// 5. 사용했던 자원 반납 ==> 보통 객체가 생성된 순서의 역순으로 닫아준다.
			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) {}
		}
		
	}

}

[jdbcTest03.java]

package kr.or.ddit.basic;

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

// 문제) lprod_id값을 2개 입력 받아서 두 값 중 작은 값부터
//		큰 값 사이의 자료들을 출력하시요. (앞 뒤의 값은 포함된다.)

public class jdbcTest03 {

	public static void main(String[] args) {
		
		Scanner scan = new Scanner(System.in);
		
		System.out.println("검색할 lprod_id의 값을 2개 입력하세요.");
		System.out.print("1번째 lprod_id >> ");
		int lprod_id1 = Integer.parseInt(scan.nextLine());
		System.out.print("2번째 lprod_id >> ");
		int lprod_id2 = Integer.parseInt(scan.nextLine());
		
		int temp = 0;
		if(lprod_id1 > lprod_id2) {
			temp = lprod_id1;
			lprod_id1 = lprod_id2;
			lprod_id2 = temp;
		}
		
//		System.out.println("lprod_id1 : " + lprod_id1);
//		System.out.println("lprod_id2 : " + lprod_id2);
		
		// DB작업에 필요한 객체 변수 선언
		Connection conn = null;
		Statement stmt = null;
		ResultSet rs = null;
		
		String url = "jdbc:oracle:thin:@localhost:1521:xe";
		String user = "pc_09";
		String password = "java";
		
		try {
			// 1. 드라이버 로딩
			Class.forName("oracle.jdbc.driver.OracleDriver");
			
			// 2. DB시스템에 연결하기
			conn = DriverManager.getConnection(url, user, password);
			
			// 3-1. SQL문 작성 ==> 문자열로 작성
			String sql = "select * from lprod where lprod_id between "+ lprod_id1 +" and " + lprod_id2;
			
			// 3-2. PreparedStatement객체 생성 ==> 질의를 수행하는 객체 생성
			stmt = conn.createStatement();
			
			// 3-3. SQL문을 DB서버로 보내서 결과를 얻어온다.
			rs = stmt.executeQuery(sql);
			
			// 4. 결과 처리하기 ==> 가져온 결과를 화면에 한 레코드씩 출력해 보기
			System.out.println(" == 쿼리문 실행 결과 ==");
			System.out.println("-----------------------------------------------");
			while(rs.next()) {
				System.out.print("LPROD_ID : " + rs.getInt("lprod_id") + ", ");
				System.out.print("LPROD_GU : " + rs.getString("lprod_gu") + ", ");
				System.out.println("LPROD_NM : " + rs.getString("lprod_nm"));
				System.out.println("-----------------------------------------------");
			}
			System.out.println("출력 작업 끝...");
			
		} catch (SQLException e) {
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} finally {
			// 5. 사용했던 자원 반납 ==> 보통 객체가 생성된 순서의 역순으로 닫아준다.
			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) {}
		}
		
	}

}


[jdbcTest03_2.java]

package kr.or.ddit.basic;

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

// 문제) lprod_id값을 2개 입력 받아서 두 값 중 작은 값부터
//		큰 값 사이의 자료들을 출력하시요. (앞 뒤의 값은 포함된다.)

public class jdbcTest03_2 {

	public static void main(String[] args) {
		
		Scanner scan = new Scanner(System.in);
		
		System.out.println("검색할 lprod_id의 값을 2개 입력하세요.");
		System.out.println();
		
		System.out.print("첫번째 lprod_id값 입력 >> ");
		int num1 = Integer.parseInt(scan.nextLine());
		System.out.print("두번째 lprod_id값 입력 >> ");
		int num2 = Integer.parseInt(scan.nextLine());
		System.out.println();
		
		// 큰 값 찾기 1
//		if(num1 > num2) {
//			int temp = num1;
//			num1 = num2;
//			num2 = temp;
//		}
		
//		System.out.println("num1 : " + num1);
//		System.out.println("num2 : " + num2);
		
		// 큰 값 찾기 2
//		int min = num1 > num2 ? num2 : num1;
//		int max = num1 > num2 ? num1 : num2;
		
		// 큰 값 찾기 3
		int min = Math.min(num1, num2);
		int max = Math.max(num1, num2);
		
//		System.out.println("min : " + min);
//		System.out.println("max : " + max);
		
		Connection conn = null;
		Statement stmt = 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);
			
			String sql = "select * from lprod where lprod_id >= "+ min +" and lprod_id <= " + max;
//			String sql = "select * from lprod where lprod_id between "+ min +" and " + max;
			
			stmt = conn.createStatement();
			rs = stmt.executeQuery(sql);
			
			System.out.println(" == 쿼리문 실행 결과 ==");
			System.out.println("-----------------------------------------------");
			while(rs.next()) {
				System.out.print("LPROD_ID : " + rs.getInt("lprod_id") + ", ");
				System.out.print("LPROD_GU : " + rs.getString("lprod_gu") + ", ");
				System.out.println("LPROD_NM : " + rs.getString("lprod_nm"));
				System.out.println("-----------------------------------------------");
			}
			System.out.println("출력 작업 끝...");
			
		} catch (SQLException e) {
			e.printStackTrace();
		} catch (ClassNotFoundException 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) {}
		}
		
	}

}

-- 은행 계죄번호 관리 테이블
create table bankinfo(
    bank_no varchar2(40) not null, -- 계좌번호
    bank_name varchar2(40) not null, -- 은행명
    bank_user_name varchar2(30) not null, -- 예금주 이름
    bank_date date not null, -- 개설 날짜
    constraint pk_bankinfo primary key (bank_no)
);

--INSERT INTO 테이블명 (컬럼명들...) 
--     VALUES (값들...);

INSERT INTO bankinfo (bank_no, bank_name, bank_user_name, bank_date) VALUES ('1234-56-789-00', '하나은행', '홍길동', sysdate);
commit;

select * from bankinfo;

[jdbcTest04.java]

package kr.or.ddit.basic;

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

public class jdbcTest04 {

	public static void main(String[] args) {
		
		Scanner scan = new Scanner(System.in);
		
		Connection conn = null;
		Statement stmt = null;
		PreparedStatement pstmt = 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);
			
			System.out.println("=== 계좌 정보 추가하기 ===");
			
			System.out.print("계좌 번호 >> ");
			String bankNo = scan.nextLine();
			
			System.out.print("은 행 명 >> ");
			String bankName = scan.nextLine();
			
			System.out.print("예금주 이름 >> ");
			String userName = scan.nextLine();
			
			// Statement객체를 이용해서 추가하기
//			String sql = " INSERT INTO bankinfo (bank_no, bank_name, bank_user_name, bank_date) "
//				       + " VALUES ('" + bankNo + "', '" + bankName + "', '"+ userName +"', sysdate) ";
//			
//			System.out.println("확인용 sql : " + sql);
//			
//			stmt = conn.createStatement();
//			
//			// select문을 실행할 때는 executeQuery()메서드를 사용하고
//			// select문이 아닐 때(insert, update, delete문 등)는 executeUpdate()메서드를 사용한다.
//			// executeUpdate()메서드의 반환값 ==> 정수값(작업에 성공한 레코드 수)
//			int cnt = stmt.executeUpdate(sql);
			
			/////////////////////////////////////////////////////////////
			
			// PreparedStatement객체를 이용해서 추가하기
			// SQL문을 작성할 때 SQL문에서 데이터가 들어갈 자리는 물음표(?)로 표시해서 작성한다.
			String sql = " INSERT INTO bankinfo (bank_no, bank_name, bank_user_name, bank_date) "
				       + " VALUES ( ?, ?, ?, sysdate ) ";
			
			// PreparedStatement객체 생성 ==> 객체를 생성할 때 SQL 문을 인수값으로 넣어준다.
			pstmt = conn.prepareStatement(sql);
			
			// SQL문의 물음표(?)에 들어갈 데이터를 셋팅한다.
			// 형식) PreparedStatement객체.set자료형이름(물음표번호, 셋팅할 데이터)
			//			==> 물음표번호는 1번부터 시작한다.
			pstmt.setString(1, bankNo);
			pstmt.setString(2, bankName);
			pstmt.setString(3, userName);
			
			// 데이터 셋팅이 완료되면 SQL문을 실행한다.
			int cnt = pstmt.executeUpdate();
			
			System.out.println("반환값 => " + cnt);
			
		} catch (SQLException e) {
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} finally {
			if(stmt != null) try { stmt.close(); } catch (SQLException e) {}
			if(conn != null) try { conn.close(); } catch (SQLException e) {}
		}
		
	}

}


[jdbcTest03_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.sql.Statement;
import java.util.Scanner;

// 문제) lprod_id값을 2개 입력 받아서 두 값 중 작은 값부터
//		큰 값 사이의 자료들을 출력하시요. (앞 뒤의 값은 포함된다.)

public class jdbcTest03_2 {

	public static void main(String[] args) {
		
		Scanner scan = new Scanner(System.in);
		
		System.out.println("검색할 lprod_id의 값을 2개 입력하세요.");
		System.out.println();
		
		System.out.print("첫번째 lprod_id값 입력 >> ");
		int num1 = Integer.parseInt(scan.nextLine());
		System.out.print("두번째 lprod_id값 입력 >> ");
		int num2 = Integer.parseInt(scan.nextLine());
		System.out.println();
		
		// 큰 값 찾기 1
//		if(num1 > num2) {
//			int temp = num1;
//			num1 = num2;
//			num2 = temp;
//		}
		
//		System.out.println("num1 : " + num1);
//		System.out.println("num2 : " + num2);
		
		// 큰 값 찾기 2
//		int min = num1 > num2 ? num2 : num1;
//		int max = num1 > num2 ? num1 : num2;
		
		// 큰 값 찾기 3
		int min = Math.min(num1, num2);
		int max = Math.max(num1, num2);
		
//		System.out.println("min : " + min);
//		System.out.println("max : " + max);
		
		Connection conn = null;
		Statement stmt = 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);
			
			// Statement 객체 이용하여 처리하기
//			String sql = "select * from lprod where lprod_id >= "+ min +" and lprod_id <= " + max;
////			String sql = "select * from lprod where lprod_id between "+ min +" and " + max;
//			
//			stmt = conn.createStatement();
//			rs = stmt.executeQuery(sql);
			
			////////////////////////////////////////////////////
			
			// PrepareStatement 객체 이용하여 처리하기
			String sql = "select * from lprod where lprod_id >= ? and lprod_id <= ? ";
//			String sql = "select * from lprod where lprod_id between ? and ? ";
			
			pstmt = conn.prepareStatement(sql);
			pstmt.setInt(1, min);
			pstmt.setInt(2, max);
			
			rs = pstmt.executeQuery();
			
			System.out.println(" == 쿼리문 실행 결과 ==");
			System.out.println("-----------------------------------------------");
			while(rs.next()) {
				System.out.print("LPROD_ID : " + rs.getInt("lprod_id") + ", ");
				System.out.print("LPROD_GU : " + rs.getString("lprod_gu") + ", ");
				System.out.println("LPROD_NM : " + rs.getString("lprod_nm"));
				System.out.println("-----------------------------------------------");
			}
			System.out.println("출력 작업 끝...");
			
		} catch (SQLException e) {
			e.printStackTrace();
		} catch (ClassNotFoundException 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) {}
		}
		
	}

}

[jdbcTest05.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.sql.Statement;
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 ( ?, ?, ? )
 * 
 * LPROD_ID	NUMBER(7,0)
 * LPROD_GU	CHAR(4 BYTE)
 * LPROD_NM	VARCHAR2(40 BYTE)
 */
public class jdbcTest05 {

	public static void main(String[] args) {
		
		Scanner scan = new Scanner(System.in);
		
		Connection conn = null;
		Statement stmt = null;
		PreparedStatement pstmt = null;
		PreparedStatement pstmt2 = 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);
			
			// 1. lprod_id는 현재의 lprod_id값 중에서 제일 큰 값보다 1 크게 한다.
			String sql = " select max(lprod_id) as maxNum from lprod ";
			stmt = conn.createStatement();
			rs = stmt.executeQuery(sql);
			
			int maxNum = 0;
			if(rs.next()) {
				maxNum = rs.getInt("maxNum");
			}
			maxNum++; // lprod_id max값에서 1 증가시키기
			
			// 2. 입력받은 lprod_gu가 이미 등록되어 있으면 다시 입력받아서 처리한다.
			String lprodGu = null; // '상품분류코드'가 저장될 변수 선언
			int count = 0; // 입력한 '상품분류코드'의 개수가 저장될 변수 선언
			do {
				System.out.print("상품분류코드(LPROD_GU) 입력 >> ");
				lprodGu = scan.nextLine();
				
				String sql2 = " select count(*) as cnt from lprod where lprod_gu = ? ";
				pstmt = conn.prepareStatement(sql2);
				pstmt.setString(1, lprodGu);
				
				rs = pstmt.executeQuery();
				
				if(rs.next()) {
					count = rs.getInt("cnt");
				}
				
				if(count > 0) {
					System.out.println("입력한 상품 분류 코드 [" + lprodGu + "] 은(는) 이미 등록된 코드입니다.");
					System.out.println("다시 입력하세요.");
				}
			}while(count > 0);
			
			System.out.print("상품 분류명(LPROD_NM) 입력 >> ");
			String lprodNm = scan.nextLine();
			
			String sql3 = " INSERT INTO lprod (lprod_id, lprod_gu, lprod_nm) VALUES ( ?, ?, ? ) ";
			pstmt2 = conn.prepareStatement(sql3);
			pstmt2.setInt(1, maxNum);
			pstmt2.setString(2, lprodGu);
			pstmt2.setString(3, lprodNm);
			
			int cnt = pstmt2.executeUpdate();
			
			if(cnt > 0) {
				System.out.println("등록 성공~");
			}else {
				System.out.println("등록 실패!");
			}
			
		} catch (SQLException e) {
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} finally {
			if(rs != null) try { rs.close(); } catch (SQLException e) {}
			if(stmt != null) try { stmt.close(); } catch (SQLException e) {}
			if(pstmt != null) try { pstmt.close(); } catch (SQLException e) {}
			if(pstmt2 != null) try { pstmt2.close(); } catch (SQLException e) {}
			if(conn != null) try { conn.close(); } catch (SQLException e) {}
		}
		
	}

}

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

230915_JDBC 2  (0) 2023.09.15
230914_JDBC 2  (0) 2023.09.14
230912_입출력 6  (0) 2023.09.11
230911_입출력 5  (0) 2023.09.11
230908_입출력 4  (0) 2023.09.08