Java DataBase Connectivity
자바를 사용해서 관계형 데이터베이스와 통신하기 위한 기술이다.
즉, 자바 프로그래밍 언어로 만들어진 클래스와 인터페이스로 이뤄진 API로써 SQL문을 실행할 수 있는 함수 호출 인터페이스다.
🤔 왜 JDBC는 인터페이스인가❓
JDBC의 자바의 코드를 수정하지 않고 또 다른 DBMS를 연결할 수 있도록 하는데 목적을 두고 있음으로 중재자로서 인터페이스를 제공해야 한다.
즉, JDBC가 자바와 DBMS 사이에서 중재역할(인터페이스 제공)을 하기 때문에 자바 입장에서는 어떤 DBMS를 사용하던지 상관하지 않고 JDBC가 정의한 인터페이스의 클래스만 사용하면 된다.
여기서 driver는 소프트웨어와와 소프트웨어간의 상호작용을 위해 기능을 제공하는 소프트웨어로,
Java Application과 DBMS간의 상호작용을 위한 기능을 제공하는 소프트웨어를 말한다.
Driver란❓
기존에 driver는 하드웨어와 운영체제 간의 상호작용을 위해 기능을 제공하는 소프트웨어를 말한다.
🟠Driver interface
🟠Connection interface
DriverManager
클래스의 getConnection()
메소드를 사용해 세션을 얻어온다.setAutoCommit(true)
로 설정된다.setAutoCommit(false)
로 설정하고 SQL문에 명시적으로 commit()
을 호출해야 한다. 🟠Statement interface
SQL 문장을 실행하고 그 결과 값을 가져온다.
SQL 실행
public ResultSet executeQuery(String sql) throws SQLException
public int executeUpdate(String sql) throws SQLException
public boolean execute(String sql) throws SQLException
🟠PreparedStatement interface
PreparedStatement
객체에 저장된다.clearParameters()
메소드를 이요해 Statement에 남은 값을 초기화한다.🟠CallableStatement interface
🟠ResultSet interface
ResultSet
객체의 포인터는 첫번째 레코드의 이전을 가리킴으로 SQL 쿼리 결과를 처리하기 전에 반드시 next()
메소드를 사용하여 레코드를 가리키게 해야한다.개발 순서
1. JDBC Driver Loading
2. DBMS와 연결 - DriverManager.Connection 생성
3. SQL 실행 준비 - Statement, PreparedStatement 생성
4. SQL Query 실행 - executeXXX()
5. SQL Query 결과 처리
6. DBMS 자원 반납
Class.forName(Driver ClassName)
private static final String DRIVER = "com.mysql.cj.jdbc.Driver"; // MySQL Driver
Class.forName(DRIVER); // 드라이버 로딩
private static final String URL = "jdbc:mysql://localhost:3306/whereismyhome?serverTimezone=UTC";
private static final String DB_ID = "shinyeji";
private static final String DB_PWD = "shinyeji";
Connection conn = DriverManager.getConnection(URL, DB_ID, DB_PWD);
Statement stmt = conn.createStatement();
PreparedStatement pstmt = conn.prepareStatement(sql);
int cnt = stmt.executeUpdate(sql);
ResultSet rs = stmt.executeQuery(sql);
pstmt.setXXX(index,value);
String sql = "select * from user where id=? and name=?"
// index : query문의 ?변수의 순서, value ?에 넣을 값
pstmt.setInt(1,456);
pstmt.setString(2,'이정재');
int = pstmt.executeUpdate();
ResultSet rs = pstmt.executeQuery();
while(rs.next()){
int id = rs.getInt(id);
// 데이터베이스의 컬럼이름 (or 컬럼 index)을 매개변수로 넣으면 해당하는 값을 반환받는다.
String name = rs.getString(name);
}
rs.close();
pstmt.close();
conn.close();