Language/Java

JDBC - oracleDB 연동 및 DML

do-oni 2021. 8. 9. 23:11

08.09 TIL

 

JDBC 란?

Java DataBase Connectivity
자바에서 데이터베이스에 접속할 수 있도록 하는 자바 API

 

DB 접속

java.sql.Connection
- DB와의 연결 정보를 가지고 있는 Interface

- DriverManager 로부터 Connection 객체 가져옴
java.sql.DriverManager
- DB와 연결하는 Driver class를 만들때 반드시 implements 해야 하는 JDBC Driver 중심 Interface
java.sql.ResultSet
- DB 조회 결과 집합에 대한 표준
- next()로 DB table의 row 한 줄 가져옴
- getString(), getInt()를 통해 row의 특정 column값 가져옴
java.sql.Statement
- SQL문을 정의하고 변경 될 값은 치환문자를 이용해 값을 setting

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

public class DBUtil {
	public static Connection getConnection() throws SQLException {
		return DriverManager.getConnection("jdbc:oracle:thin:@접속ip", "id", "pw");
	}​

DB에 접속하는 메소드는 public static으로 선언해 계정 정보만 바꿔서 사용

public static void close(Connection con, Statement stmt, ResultSet rset) {
    try {
    	if(rset != null) {
        	rset.close();
		rset = null;
            }
        if(stmt != null) {
        	stmt.close();
            stmt = null;
			}
        if(con != null) {
        	con.close();
            con = null;
			}
    } catch (SQLException e) {
		e.printStackTrace();
    }
}
	
public static void close(Connection con, Statement stmt) {
	try {
    		if(stmt != null) {
        	stmt.close();
        	stmt = null;
			}
		if(con != null) {
        	con.close();
           	con = null;
            }
	} catch (SQLException e) {
		e.printStackTrace();
	}
}

자원 반환 해주는 메소드
ResultSet -> Statement -> Connection 순서

 

executeQuery()

- SQL문 실행시 SELECT문에만 쓰이는 메소드

- 반환값은 ResultSet 으로 받음

 

table의 모든 정보 검색
//jUnit 단위테스트
@Test
public void selectAll() {
	Connection con = null;
	Statement stmt = null;
	ResultSet rset = null;
		
    try {
    	con = DBUtil.getConnection();
        stmt = con.createStatement();
        rset = stmt.executeQuery("select * from dept");
		
        while(rset.next()) {
				System.out.println(rset.getInt("deptno") + "/" 
                				 + rset.getString("dname") + "/" 
                				 + rset.getString("loc"));
			}
    } catch (SQLException e) {
    	e.printStackTrace();
    } finally {
    	DBUtil.close(con, stmt, rset);
	}
}​​


row 한 줄 검색

//jUnit 단위테스트
@Test
public void selectOne() {
    Connection con = null;
    Statement stmt = null;
    ResultSet rset = null;
		
    try {
    	con = DBUtil.getConnection();
        stmt = con.createStatement();
        rset = stmt.executeQuery("select * from dept where deptno=10");
        
	if(rset.next()) {
	    System.out.println(rset.getInt("deptno") + "/" + rset.getString("dname") + "/" + rset.getString("loc"));
        }	
    } catch (SQLException e) {
    	e.printStackTrace();
    } finally {
    	DBUtil.close(con, stmt, rset);
    }
}

 

 

executeUpdate()

- DML[insert/update/delete] SQL 문장 처리 메소드

 

Insert
//	@Test
public void insertOne() {
    Connection con = null;
    Statement stmt = null;
		
    try {
    	con = DBUtil.getConnection();
        stmt = con.createStatement();
			
        int result = stmt.executeUpdate("INSERT INTO dept VALUES (60, '교육부', '남부')");
			
        if(result == 1) {
        	System.out.println("저장 성공");
        }else {
        	System.out.println("deptno 중복 저장 불허");
        	}
    } catch (SQLException e) {
        e.printStackTrace();
    } finally {
        DBUtil.close(con, stmt);
		}
	}

 

Update
// jUnit 단위테스트
//	@Test
public void updateOne() {
	Connection con = null;
	Statement stmt = null;
		
    try {
    	con = DBUtil.getConnection();
        stmt = con.createStatement();
			
        int result = stmt.executeUpdate("UPDATE dept SET loc='평양' WHERE deptno=60");
			
        if(result == 1) {
        	System.out.println("수정 성공");
        }else {
        	System.out.println("deptno 수정 실패");
        	}
    } catch (SQLException e) {
        e.printStackTrace();
    } finally {
        DBUtil.close(con, stmt);
	}
}

 

Delete
//jUnit 단위테스트
@Test
public void deleteOne() {
    Connection con = null;
    Statement stmt = null;
		
    try {
        con = DBUtil.getConnection();
        stmt = con.createStatement();
			
        int result = stmt.executeUpdate("DELETE FROM dept WHERE deptno=60");
			
        if(result == 1) {
            System.out.println("삭제 성공");
        }else {
            System.out.println("deptno 삭제 실패");
		}
    } catch (SQLException e) {
    	e.printStackTrace();
    } finally {
    	DBUtil.close(con, stmt);
	}
}​