Language/Java
JDBC - oracleDB 연동 및 DML
do-oni
2021. 8. 9. 23:11
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); } }