inderrom 2022. 11. 27. 19:16

 db와 연결 연습

 

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 {
	public static void main(String[] args) {

		Scanner sc = new Scanner(System.in);
		
		System.out.println("lprod_id를 입력하시오 >> ");
		int num = sc.nextInt();
		
		Connection conn = null;
		Statement stmt = null;
		ResultSet rs = null;
		
		try {
			Class.forName("oracle.jdbc.driver.OracleDriver");
			
			conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe",
					"SSR97","java");

			
 			String sql = "select lprod_id, lprod_gu, lprod_nm as 선롬새 from lprod where lprod_id >" + num;
//			String sql = "select * lprod_id";  <<위에 줄이 아니라 이렇게 다 가져오고 while문 안에서 if문 돌리는 방법도 있으나 좋지 않음
			
			stmt = conn.createStatement();
			rs = stmt.executeQuery(sql);
			
			System.out.println(" == 쿼리문 검색 결과 ==");
			
			while(rs.next()) {
				//if(rs.getInt("lprod_id") > num) { // 좋지 않은 방법! 
				System.out.println("Lprod_ID : " + rs.getInt("lprod_id"));
				System.out.println("Lprod_GU : " + rs.getString(2));		// 컬럼번호 이용
				System.out.println("Lprod_NM : " + rs.getString("선롬새"));		// alias명 이용
				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) {}
		}
	}
}
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 sc = new Scanner(System.in);
		
		System.out.println("첫번째 lprod_id값을 입력하시오 >>");
		int num1 = sc.nextInt();
		
		System.out.println("두번째 lprod_id값을 입력하시오 >>");
		int num2 = sc.nextInt();
		
		int min,max;
		
		// 방법1
//		if(num1 < num2) {
//			min = num1;
//			max = num2;
//		}else if(num1> num2) {
//			min = num2;
//			max = num1;
//		}
	  
		// 방법2 
//		max = num1 > num2 ? num1 : num2;
//		min = num1 > num2 ? num2 : num1;

		// 방법3
		
		max = Math.max(num1, num2);
		min = Math.min(num1, num2);
		
		
		Connection conn = null;
		Statement stmt = null;
		ResultSet rs = null;
		
		try {
			
			Class.forName("oracle.jdbc.driver.OracleDriver");
			
			conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe", "SSR97","java");
			
			//String sql = "select lprod_id, lprod_gu, lprod_nm 선롬새 from lprod where lprod_id >=" + min  + "and lprod_id <=" + max;
			String sql = "select lprod_id, lprod_gu, lprod_nm 선롬새 from lprod where lprod_id between " + min  + " and " + max;
			
			stmt = conn.createStatement();
			rs = stmt.executeQuery(sql);
			
			while(rs.next()){
				System.out.println("Lprod_ID : " + rs.getInt("lprod_id"));
				System.out.println("Lprod_GU : " + rs.getString(2));		// 컬럼번호 이용
				System.out.println("Lprod_NM : " + rs.getString("선롬새"));		// alias명 이용
				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) {}
			
		}
	}

}
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;
		
		try {
			Class.forName("oracle.jdbc.driver.OracleDriver");
			
			conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe","SSR97","java");
			
			System.out.println("==계좌번호 정보 추가하기 ==");
			System.out.print("계좌번호 >>");
			String bankNo = scan.next();
			
			System.out.print("은 행 명 >> ");
			String bankName = scan.next();
			
			System.out.print("예금주명 >> ");
			String userName = scan.next();
			/*
			//------------------------------------------
			// Statement객체를 이용하여 데이터 추가하기
			String sql = "insert into bankinfo(bank_no, bank_name, bank_user_name, bank_date)"
					+ "values('" +bankNo + "','" + bankName + "', '" + userName + "', sysdate)";
			
			stmt = conn.createStatement();
			
			// 실행할 SQL문이 select문일 경우에는 executeQuery()메서드를 사용하는데
			// SQL문이 insert, update, delete문 등일 경우에는 executeUpdate()메서드를 사용한다.
			// executeUpdate()메서드의 반환값 ==> 작업에 성공한 레코드 수
			int cnt = stmt.executeUpdate(sql);
			*/
			//-------------------------------------------
			// PreparedStatement객체를 이용하여 데이터 추가하기
			
			//SQL문을 작성할 때 데이터가 들어갈 자리를 물음표(?)표시하여 작성한다.
			
			String sql = "insert into bankinfo(bank_no, bank_name, bank_user_name, bank_date)"
					+ "values(?, ?, ?, sysdate)";
			
			// PreparedStatement객체 생성 ==> 이 때 사용할 SQL문을 인수값으로 넣어준다.
			pstmt = conn.prepareStatement(sql);
			
			// SQL문의 물음표(?)자리에 들어갈 데이터 셋팅한다.
			// 형식) pstmt.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(pstmt != null) try {pstmt.close();} catch(SQLException e) {}
			if(conn != null) try {conn.close();} catch(SQLException e) {}
		}
		
	}

}
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;

import kr.or.ddit.util.DBUtil;

/*

	LPROD테이블에 새로운 데이터 추가하기
	
	lprod_gu와 lprod_nm값은 직접 입력받아서 처리하고, 
	lprod_id는 현재의 Lprod_id 중에서 제일 큰 값보다 1크게 한다.
	
	입력 받은 lprod_gu(기본키)가 이미 등록되어 있으면 다시 입력 받아서 처리한다.


*/
public class JdbcTest05 {

	public static void main(String[] args) {

		Scanner scan = new Scanner(System.in);
		
		
		Connection conn = null;
		Statement stmt = null;
		PreparedStatement pstmt = null;
		ResultSet rs = null;
		
		try {
			
//			Class.forName("oracle.jdbc.driver.OracleDriver");
//			
//			conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe","SSR97","java");
			
			conn = DBUtil.getConnection();
			
			
			// lprod_id는 현재의 lprod_id 중에서 제일 큰 값보다 1 크게 한다.
			String sql = "select nvl(max(lprod_id), 0 ) maxid from lprod";
			stmt = conn.createStatement();
			
			rs = stmt.executeQuery(sql);
			
			int maxid = 0;
			
			
			if(rs.next()) {
			   //maxid = rs.getInt(1);
				maxid = rs.getInt("maxid");
			}
			maxid++;   // 제일 큰 값 +1
			
			//--------------------------------------------
			
			//입력 받은 Lprod_gu가 이미 등록되어 있으면 다시 입력 받는다.
			String gu;     // 입력한 Lprod_gu가 저장될 변수
			int count = 0;  // 입력한 Lprod_gu가 DB에 몇 개가 있는지 개수를 저장할 변수
			
			do{
				System.out.print("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("입력한 LPROD_GU값 " + gu + "은(는) 이미 등록되어 있습니다.");
					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(); // select문이 아닐 때...
			
			if(cnt >0) {
				System.out.println("등록 성공 !!!");
			}else {
				System.out.println("등록실패 !!!");
			}
			
			
			
		} catch (SQLException e) {
			e.printStackTrace();
		}finally {
			
			if(stmt != null) try { stmt.close();} catch(SQLException e) {}
			if(pstmt != null) try { pstmt.close();} catch(SQLException e) {}
			if(conn != null) try { conn.close();} catch(SQLException e) {}
		}
		
	}

}

 

 

 

-- 회원을 관리하는 프로그램을 작성하시오 ! 

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;

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

	
/*	
  	MVC패턴, Singleton패턴 조사!
 
	회원을 관리하는 프로그램을 작성하시오. (MYMEMBER 테이블 이용)
	
	아래 메뉴의 기능을 모두 구현하시오. ( CRUD 기능 구현하기...)  C - INSERT
	------------------------------------
		== 작업 선택 ==
	1. 자료 추가		--> INSERT
	2. 자료 삭제		--> DELETE
	3. 자료 수정		--> UPDATE
	4. 전체 자료 출력	--> SELECT
	0. 작업 끝.
	------------------------------------
	
	 MEM_ID VARCHAR(20) NOT NULL,        -- 회원ID
    MEM_PASS VARCHAR2(30) NOT NULL,     -- 비밀번호
    MEM_NAME VARCHAR2(30) NOT NULL,     -- 회원이름
    MEM_TEL VARCHAR2(14) NOT NULL,      -- 전화번호
    MEM_ADDR V
	
	조건)
	1) 자료 추가에서 '회원ID'는 중복되지 않는다.(중복되면 다시 입력 받는다.)
	2) 자료 삭제는 '회원ID'를 입력 받아서 처리한다.
	3) 자료 수정에서 '회원ID'는 변경되지 않는다.
	
*/	
public class JdbcTest06 {
	
	private Scanner scan = new Scanner(System.in);
	
	private Connection conn;
	private Statement stmt;
	private PreparedStatement pstmt;
	private ResultSet rs;
	
	public static void main(String[] args) {
		new JdbcTest06().startMember();
	}
	
	// 자원을 반납하는 메서드
	private void disConnect() {
		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(conn!=null) try {conn.close();} catch(SQLException e) {}
	}
	
	// 시작 메서드
	public void startMember() {
		System.out.println();
		System.out.println("*****************************");
		System.out.println(" 회 원 관 리 프 로 그 램");
		System.out.println("*****************************");
		System.out.println();
		
		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("작업 번호를 잘못 입력했습니다. 다시 입력하세요.");
				System.out.println();
			}
		}
	}
	
	// 회원 정보를 수정하는 메서드 ==> 원하는 항목을 선택하여 그 항목만 수정하는 메서드
	private void updateMember2() {
		System.out.println();
		System.out.println("수정할 회원 정보를 입력하세요...");
		System.out.print("회원ID >> ");
		String memId = scan.next();
		
		int count = getMemberCount(memId);
		if(count==0) {
			System.out.println(memId + "은(는) 등록되지 않은 회원입니다.");
			System.out.println("수정 작업을 마칩니다...");
			return;
		}
		
		// 수정할 항목을 선택하기
		int num;						// 수정할 항목의 선택 번호
		String updateField = null; 		// 수정할 컬럼명이 저장될 변수
		String updateTitle = null;		// 입력할 때 출력할 제목이 저장될 변수
		do {
			System.out.println();
			System.out.println("수정할 항목을 선택하세요...");
			System.out.println("1.비밀번호   2.회원이름   3.전화번호   4.회원주소");
			System.out.print("수정할 항목 선택 >> ");
			num = scan.nextInt();
			
			switch (num) {
			case 1: updateField = "mem_pass"; updateTitle="비밀번호"; break;
			case 2: updateField = "mem_name"; 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);
		scan.nextLine(); // 입력 버퍼 비우기
		System.out.println();
		System.out.print("새로운" + updateTitle + " >> ");
		String updateData = scan.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("수정 작업 성공!!!");
			}else {
				System.out.println("수정 작업 실패~~~");
			}
			
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			disConnect();
		}
		
		
		
	}
	
	
	// 회원 정보를 수정하는 메서드 ==> 전체 항목 수정하기
	private void updateMember() {
		System.out.println();
		System.out.println("수정할 회원 정보를 입력하세요...");
		System.out.print("회원ID >> ");
		String memId = scan.next();
		
		int count = getMemberCount(memId);
		if(count==0) {
			System.out.println(memId + "은(는) 등록되지 않은 회원입니다.");
			System.out.println("수정 작업을 마칩니다...");
			return;
		}
		
		System.out.println("새로운 비밀번호 >> ");
		String newMemPass = scan.next();
		
		System.out.println("새로운 회원이름 >> ");
		String newMemName = scan.next();
		
		System.out.println("새로운 전화번호 >> ");
		String newMemTel = scan.next();
		
		scan.nextLine();
		System.out.println("새로운 회원주소 >> ");
		String newMemAddr = scan.next();
		
		try {
			conn = DBUtil.getConnection();
			String sql = "update mymember set mem_pass =?, mem_name =?,"
					+ "mem_tel =?, mem_addr =?"
					+ "where mem_id =?";
			
			pstmt = conn.prepareStatement(sql);
			pstmt.setString(1, newMemPass);
			pstmt.setString(2, newMemName);
			pstmt.setString(3, newMemTel);
			pstmt.setString(4, newMemAddr);
			pstmt.setString(5, memId);
			
			int cnt = pstmt.executeUpdate();
			
			if(cnt>0) {
				System.out.println(memId + "회원 정보 수정 성공!!");
			}else {
				System.out.println(memId + "회원 정보 수정 실패~~~");
			}
			
			
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			disConnect();
		}
		
	}
	
	// 회원 정보를 삭제하는 메서드
	private void deleteMember() {
		System.out.println();
		System.out.println("삭제할 회원 정보를 입력하세요...");
		System.out.print("삭제할 회원ID >> ");
		String memId = scan.next();
		
		try {
			conn = DBUtil.getConnection();
			String sql = "delete from mymember where mem_id = ?";
			pstmt = conn.prepareStatement(sql);
			pstmt.setString(1, memId);
			
			int cnt = pstmt.executeUpdate();
			if(cnt>0) {
				System.out.println("회원ID가" + memId + "인 회원 정보 삭제 성공!! ");
			}else {
				System.out.println(memId + "회원은 없는 회원이거나 삭제에 실패했습니다.~~~");
			}
			
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			disConnect();
		}
		
	}
	
	
	// 전체 회원 정보를 출력하는 메서드
	private void displayMember(){
		System.out.println();
		System.out.println("------------------------------------------------");
		System.out.println("  ID    비밀번호    이름     전화번호     주소");
		System.out.println("------------------------------------------------");
		try {
//			conn = DBUtil.getConnection();
//			conn = DBUtil2.getConnection();
			conn = DBUtil3.getConnection();
			String sql = "select * from mymember";
			stmt = conn.createStatement();
			
			rs = stmt.executeQuery(sql);
			
			while(rs.next()) { // 데이터가 많이 나올 수 있기 때문에 while문을 써줌
				String memId = rs.getString("mem_id");
				String memPass = rs.getString("mem_pass");
				String memName = rs.getString("mem_name");
				String memTel = rs.getString("mem_tel");
				
				String memAddr = rs.getString("mem_addr");
			
				System.out.println("  " + memId + "    " + memPass + "    " + memName + "     " + memTel + "    " + memAddr );
			}
			System.out.println("-----------------------------------------------");
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			disConnect();
		}
	
	
	}
	
	

	// 회원 정보를 추가하는 메서드
	private void insertMember() {
		System.out.println();
		System.out.println("추가할 회원 정보를 입력하세요...");
		
		int count = 0;  // 회원ID의 개수가 저장될 변수
		String memId; 	// 회원ID가 저장될 변수
		do {
			System.out.println("회원ID >> ");
			memId = scan.next();
			count = getMemberCount(memId);
			if(count>0) {
				System.out.println(memId +"은(는) 이미 등록된 회원ID입니다.");
				System.out.println("다른 회원ID를 입력하세요...");
			}
		}while(count>0);
		
		System.out.print("비밀번호 >> ");
		String memPass = scan.next();
		
		System.out.print("회원이름 >> ");
		String memName = scan.next();
		
		System.out.print("전화번호 >> ");
		String memTel = scan.next();
		
		scan.nextLine();	// 입력 버퍼 비우기
		System.out.print("회원주소 >> ");
		String memAddr = scan.next();
		
		try {
			conn = DBUtil.getConnection();
			String sql = "insert into mymember (mem_id, mem_pass, mem_name, mem_tel, mem_addr)"
					+ "values(?, ?, ?, ?, ?)";
			pstmt = conn.prepareStatement(sql);
			pstmt.setString(1, memId);
			pstmt.setString(2, memPass);
			pstmt.setString(3, memName);
			pstmt.setString(4, memTel);
			pstmt.setString(5, memAddr);
			
			int cnt = pstmt.executeUpdate();
			if(cnt > 0) {
				System.out.println(memId + "회원 정보 추가 완료!!!");
			}else {
				System.out.println(memId + "회원 정보 추가 실패~~~");
			}
			
			
			
		} catch (SQLException e) {
			e.printStackTrace();
		}finally {
			disConnect();
		}
		
		
	}
	
	
	// 회원ID를 인수값으로 받아서 DB에 등록된 해당 회원ID의 개수를 반환하는 메서드
	private int getMemberCount(String memId	) {
		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) {
			e.printStackTrace();
		} finally {
			disConnect();
		}
		
		return count;
	}
	
	
	// 메뉴를 출력하고 입력한 작업 번호를 반환하는 메서드
	private int displayMenu() {
		System.out.println();
		System.out.println("==== 작업 선택 ====");
		System.out.println("1. 자료 추가");
		System.out.println("2. 자료 삭제");
		System.out.println("3. 자료 수정");
		System.out.println("4. 전체 자료 출력");
		System.out.println("5. 자료 수정2");
		System.out.println("0. 작업 끝.");
		System.out.println();
		System.out.print("작업 번호 입력>>");
		return scan.nextInt();
	}
	
}

 


**db연결을  한번에 처리하기

 

package kr.or.ddit.util;

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

// JDBC드라이버를 로딩하고 DB서버에 연결된 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() {
		try {
			
			return DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe","SSR97","java");
			
			
		} catch (SQLException e) {
			System.out.println("DB 연결 실패 !!!");
			return null;
		}
	}
	
	
}