본문 바로가기
멀티캠퍼스 풀스택 과정/데이터베이스

데이터베이스2-4 JDBC로 JAVA와 DB의 연동(UPDATE문)

by 이쟝 2022. 1. 19.

https://everysmallstep.tistory.com/121

 

데이터베이스2-1 JDBC로 JAVA와 DB의 연동(SELECT문)

JDBC API - Java DataBase Connectivity의 약자로 JDBC는 자바 언어로 데이터베이스 프로그래밍을 하기 위한 라이브러리 - JDBC는 DBMS에 종속되지 않는 관련 API를 제공한다. - JDBC API는 JDK에서 제공하며 JDBC..

everysmallstep.tistory.com

-> 기본 SELECT문을 가지고 약간씩 변형하게 된다.


JAVA와 DB의 연동 UPDATE문

-> 사원번호와 급여를 입력받아 해당사원의 급여를 수정하는 프로그램작성

-> 데이터를 입력하고, 입력받은 데이터를 기준으로 데이터 변경

 

0. 수정할 데이터를 입력받기

- 사원 번호(empno)와 급여(sal) 입력 받는다. 

 

System.out.print("수정할 사원 번호 = ");
int empno = sc.nextInt();
System.out.print("수정할 급여 = ");
int sal = sc.nextInt();

 

1. JDBC 드라이버 load

 

public class UpdateTest {

	public UpdateTest() { // 객체 생성할 때 한 번만 실행, 생성자
	}
    
	public void start() {
        try { 
            Class.forName("com.mysql.cj.jdbc.Driver");  // 폴더에 들어가서 Driver.class가 있는 파일의 경로를 적기
	} catch (Exception e) {}
        }    
}

 

2. CONNECTION 객체 생성(DB연결)

 

Connection con = null;

String url = "jdbc:mysql://127.0.0.1/demo"; // 서버 IP주소/DB명
con = DriverManager.getConnection(url, "root", "root1106");

 

3. PreparedStatement 객체 생성   4. 쿼리문 값 세팅

-> 쿼리문을 가지고 PreparedStatement 객체를 생성하고 수정할 쿼리문 값을 세팅한다. 

 

-> UPDATE emp SET sal = 4000 WHERE empno = 1111 ); (기본 쿼리문)

-> emp 테이블의 사원번호가 1111인 사원의 급여를 4000으로 변경한다. 

 

-> 데이터가 변경되서 실행되야 할 때는 물음표로 배치해야 한다!!(자바에서 데이터가 발생하게 됨)

-> UPDATE emp SET sal = ? WHERE empno = ? );

 

Connection con = null; 
PreparedStatement pstmt = null;  

 // 3. preparedStatemnet 객체 생성(쿼리문 이용), 4. 쿼리문 값 세팅
 //                              1               2
String sql = "update emp set sal=? where empno = ?";
pstmt = con.prepareStatement(sql);
            
 // ?에 값을 세팅한다. 번호 순서대로
pstmt.setInt(1, sal);
pstmt.setInt(2, empno);

 

5. 실행

- 쿼리문을 실행해 수정된 레코드의 수를 반환한다.

-> cnt 변수를 만들어서 cnt에 0이 있으면 레코드 실패, cnt에 1이 있으면 레코드 성공

-> exceuteUpdate( )를 사용해 업데이트의 값이 있는지 확인한다. 

 

ExecuteQuery ExecuteUpdate
수행결과로 ResultSet 객체의 값을 반환 수행결과로 Int 타입의 값을 반환
SELECT 구문을 수행할 때 사용되는 함수
SELECT 구문을 제외한 다른 구문을 수행할 때 사용되는 함수

 

int result = pstmt.executeUpdate();
if(result>0) {
	System.out.println(result + "개의 레코드가 수정되었습니다.");
} else {
    System.out.println("수정한 레코드가 없습니다.");  // 해당 레코드가 없을수도 있기 때문에 오류가 아님
}

 

6. PreparedStatement 객체 Close, Connection 객체 Close

 

} catch (Exception e) {
	e.printStackTrace();
} finally {      // 수정이 되던 안되던 닫아줘야 한다.
	try {   
		if(pstmt != null) pstmt.close();
        if(con != null) con.close();
	} catch (Exception e1) { }
}

 

7. 마지막으로  main 메서드에서 이 UpdateTest 생성자를 사용해서 start메서드 호출!

 

 public class UpdateTest {
	
    public UpdateTest( ) {
    }
    
    public void start( ) {
    // DB연동코드
    }
    
    public static void main(String[] args) {
 		new InsertTest().start();
	}
}

 

<실행결과>

 

더보기

 

 

-> UpdateTest가 제대로 실행되면 레코드가 추가되고, SelectTest 문으로 가서 실행시켜보면 수정된 것을 확인해볼 수 있다. 

 

<전체코드>

 

import java.sql.*;
import java.util.Scanner;

public class UpdateTest {
	Scanner sc = new Scanner(System.in);
	
	public UpdateTest() {
		
	}
	
	public void start() {
		// 사원번호와 급여를 입력받아 해당사원의 급여를 수정하는 프로그램작성

		System.out.print("수정할 사원 번호 = ");
		int empno = Integer.parseInt(sc.nextLine());
		System.out.print("수정할 급여 = ");
		int sal = Integer.parseInt(sc.nextLine());
		
		Connection con = null;
		PreparedStatement pstmt = null;
		try {
			// 1. 드라이브로딩 
			Class.forName("com.mysql.cj.jdbc.Driver");
			// 2. db연결 
			con = DriverManager.getConnection("jdbc:mysql://127.0.0.1/demo","root","root1106");
			// 3,4. 쿼리문을 가지고 Preparedstatement 생성
			String sql = "update emp set sal=? where empno = ?";
			pstmt = con.prepareStatement(sql);
			// 3-1. : 필요데이터 셋팅
			pstmt.setInt(1, sal);
			pstmt.setInt(2, empno);
			
			// 5. 실행 : 수정한 레코드의 수를 리턴해준다.
			int result = pstmt.executeUpdate();
			
			if(result>0) {
				System.out.println(result + "개의 레코드가 수정되었습니다.");
			} else {
				System.out.println("수정한 레코드가 없습니다.");  // 해당 레코드가 없을수도 있기 때문에 오류가 아님
			}
			
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			// 6. dbClose    // 수정이 되던 안되던 닫아줘야 한다.
			try {
				if(pstmt != null) pstmt.close();
				if(con != null) con.close();
			} catch (Exception e1) { 
			}
		}
	}

	public static void main(String[] args) {
		new UpdateTest().start();

	}
}

 

-> try-catch구문을 한 번만 생성해서 모든 예외를 예외처리 해주었다.

-> try-catch구문을 사용하지 않는다면 예외선언을 해주면 된다.