본문 바로가기
혼자서 개발새발

JAVA,Oracle) 오라클과 자바를 연동해서 행을 추가, 수정, 삭제 해보자!

by 휴일이 2022. 10. 25.

 

학원에서 자바랑 오라클을 연동하는 법을 배워서

사용자가 직접 값을 입력해

DB에 데이터를 추가(행을 추가)할 수 있는 코드를 짜보았다

 

 

 

package step7;

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

public class DB {
	
	//얘네는 연동 필요한 애들
	public Connection conn = null;
	public PreparedStatement pstmt = null;
	public ResultSet rs = null;	
	public String driver; //드라이버 주소
	public String url; //url 주소
	public String uid = "hr"; //오라클 아이디
	public String upw = "hr"; //비번
	Scanner sc = new Scanner(System.in);

	public DB() { //driver랑 url 주소 미리 생성자로 초기화
		driver = "oracle.jdbc.driver.OracleDriver";
		url = "jdbc:oracle:thin:@localhost:1521";
	}

	public void con() { //기본 커넥션하기 위한 준비(얘는 할때마다 실행되어야 함)
		try {
			Class.forName(driver); //드라이버 주소를 넣기
			conn = DriverManager.getConnection(url,uid,upw); //url,id,pw를 이용해 커넥션 객체 생성
		} catch(Exception e) {
			System.out.println(e);
		}
	}

	public void discon() { //커넥션 됐던 거 끄기
		try {
			if(rs!=null) { //rs가 켜져있으면 닫기
				rs.close();
			}
			pstmt.close();
			conn.close();

		} catch(Exception e) {
			System.out.println(e);
		}
	}
	
	public void MemberInsert() { //추가
		
		con(); //연결해주기
		
		System.out.println("이름");
		String name = sc.next();
		System.out.println("주소");
		String addr = sc.next();
		System.out.println("전화");
		String tel = sc.next();
		
		//? 으로 하면, 순서대로 값을 넣어서 대입 가능(하나하나 안 적어도 됨)
		String sql = "INSERT INTO MEMBER"
				+ " VALUES(MEMBER_SEQ.NEXTVAL,?,?,?)"; //번호는 시퀀스값(자동값)이라서 사용자가 안씀

		try {
			pstmt = conn.prepareStatement(sql); //sql문 넣기
			pstmt.setString(1, name); //첫번째 ?에 입력받은 name값 넣기...
			pstmt.setString(2, addr); //두번째 ?에 입력받은 addr값 넣기...
			pstmt.setString(3, tel);
			pstmt.executeUpdate(); //완성한 sql문으로 테이블 내용 바꿈
			discon(); //닫아주기
		} catch (SQLException e) {
			e.printStackTrace();
		}
		
	}
	
	public void MemberPrint() { //전체 출력
		
		con();
		
		String sql = "SELECT * FROM MEMBER"; //전체 출력하는 sql문
		
		try {
			pstmt = conn.prepareStatement(sql); //sql문 넣고
			rs = pstmt.executeQuery(); //쿼리 실행하기 위해 값 넣음(얘는 그냥 출력할때만 씀, 값 바꾸는 건 X)
			
			while(rs.next()) { //해당하는 값이 있다면 출력
				System.out.println("번호 : "+rs.getInt(1)); //첫번째 칼럼 출력(반환값 맞아야함, Int, String...)
				System.out.println("이름 : "+rs.getString(2));
				System.out.println("주소 : "+rs.getString(3));
				System.out.println("전화 : "+rs.getString(4));
				System.out.println("=========================");
			}
			
		} catch (SQLException e) {
			e.printStackTrace();
		}
		discon(); //닫아주기
	}
	
	public boolean search(String name) { //검색(WHERE)
		
		con(); //열어주기
		
		
		String sql = "SELECT * FROM MEMBER WHERE NAME = ?"; //이름으로 검색
		try {
			pstmt = conn.prepareStatement(sql); //sql문 저장
			pstmt.setString(1, name); //?에 name값 넣음
			rs = pstmt.executeQuery(); //완성된 쿼리 넣기
			
			while(rs.next()) { //쿼리에 해당하는 값이 있다면 출력
				System.out.println("번호 : "+rs.getInt(1)); //첫번째 칼럼 출력(반환값 맞아야함, Int, String...)
				System.out.println("이름 : "+rs.getString(2));
				System.out.println("주소 : "+rs.getString(3));
				System.out.println("전화 : "+rs.getString(4));
				System.out.println("=========================");
			}
			
			return true; //반환값이 boolean이라 넣어줌
		} catch(Exception e) {
			e.printStackTrace();
		} finally {
			discon(); //무조건 닫아주기
		}
		
		return false;
		
	}
	
	public void update() { //수정
		
		con(); //열어주기
		
		System.out.println("수정할 사람의 이름");
		String name = sc.next();
		System.out.println("주소");
		String addr = sc.next();
		System.out.println("전화");
		String tel = sc.next();
		
		String sql = "UPDATE MEMBER"
				+ " SET ADDR = ?, TEL = ?" //주소, 전화번호 수정
				+ " WHERE NAME = ?"; //이름이 맞을 경우(WHERE)
		
		try {
			pstmt = conn.prepareStatement(sql); //sql문 저장
			pstmt.setString(1, addr); //? 순서에 맞게 값 넣기
			pstmt.setString(2, tel);
			pstmt.setString(3, name);
			pstmt.executeUpdate(); //쿼리 실행해서 업데이트 해주기
			discon(); //닫아주기
		} catch (SQLException e) {
			e.printStackTrace();
		}
		
		
	} //전화, 주소
	
	public void delete() { //삭제
		
		con(); //열어주기
		
		System.out.println("삭제할 이름");
		String name = sc.next();
		String sql = "DELETE MEMBER WHERE NAME = ?"; //삭제 쿼리
		
		try {
			pstmt = conn.prepareStatement(sql); //sql문 넣기
			pstmt.setString(1, name); //?값에 이름 넣기
			pstmt.executeUpdate(); //업데이트(테이블에 뭔가 수정값이 있는)해주기
			discon(); //닫아주기
		} catch(Exception e) {
			e.printStackTrace();
		}
		
	}
	
}

 

 

 

메인

package step7;

import java.util.Scanner;

import step6.Product;

public class DBMain {

	public static void main(String[] args) {
		
		DB d = new DB();
		Scanner sc = new Scanner(System.in);
		boolean flag = true;
		int i = 0;
		
		while(flag) {
			System.out.println("1.추가 2.출력 3.검색 4.수정 5.삭제 6.종료");
			i=sc.nextInt();
			
			switch(i) {
			case 1: // INSERT 생산
				d.MemberInsert();
				break;
			case 2: // SELECT 출력
				d.MemberPrint();
				break;
			case 3: // SELECT WHERE 검색
				int j;
				System.out.println("검색할 이름 입력 : ");
				String name = sc.next();
				d.search(name);
				break;
			case 4: // UPDATE 수정
				d.update();
				break;
			case 5: // DELETE 삭제
				d.delete();
				break;
			case 6:
				flag=false;
				break;
				default :
					System.out.println("잘못 입력");
			}
			
		}
		
	}

}

 

결과 참조

 

 

 

 

 

자바에서 DB랑 연동해서 값 추가나 수정 하기!

신기하다잉

728x90