JDBC(Java Database Connectivity)

- Java class와 Interface의 집합

- Java 프로그램이 DB에 의존하지 않도록, 공통된 Interface를 제공하는 JDBC 이용


 

JDBC 연결

(1) JDBC driver loading

- 사용하려는 데이터베이스에 맞는 JDBC driver class 등록

- Class라는 class가 존재

- driver Manager class 이용

// 1. JDBC driver Loading
// MySQL 8.0 부터는 아래의 Class 이용
Class.forName("com.mysql.cj.jdbc.Driver");
System.out.println("드라이버 로딩 성공");

 

(2) DBMS와 연결

- 실제로 데이터베이스와 연결된다.

- 성공하면 Connection instance가 생성된다 

- 세션을 통해 생성되는 과정 때문에 부하가 많이 걸린다.

- 자원을 다 사용한 후, 해제 해주어야 한다.(close)

- Database의 Session이 닫힐 수 있도록 쿼리ㅓ 작성

- JDBC URL 

String jdbcURL = "jdbc:mysql://localhost:3306/sqldb?characterEncoding=UTF-8&serverTimezone=UTC&useSSL=false";
con = DriverManager.getConnection(jdbcURL, "user", "password");
System.out.println("데이터 베이스 연결 성공!");

 

(3) Statement 생성

1. 일반 statement

2. preparedStatement : 1번의 개량형

3. callable statement 

- 3번은 stored procedure를 호출할 때 사용한다.

- 1, 2번은 구문으로 실행한다.

String sql = "SELECT userId, name, addr FROM usertbl";
pstmt = con.prepareStatement(sql);

 

 

(4) Query 실행

- statement를 이용해서 SQL query를 DBMS에 전달하고 실행한다.

1. execute() 

2. executeQuery() -> SELECT

3. executeUpdate() -> INSERT, UPDATE, DELETE

- 1번 X, 2, 3번 사용

rs = pstmt.executeQuery();

 

 

(5) 결과쿼리(ResultSet)

- 쿼리문을 실행한 결과 record를 가리키는 포인터

- rs.next()를 통해서 다음 행으로 넘어갈 수 있다. -> 가능하면 true, 불가능하면 false return

- rs는 쿼리를 실행시켜서 현재 데이터베이스에 있는 데이터를 그대로 가져와서 자바 프로그램에 전달해준다. 실시간으로 바뀐 데이터는 전달해주지 않는다.

- scrollable cursor은 연동이 되기 때문에 데이터베이스에 직접 접근해야해서 부하가 많이 걸린다.

ResultSet rs = pstmt.executeQuery();

- rs.getString() : String으로 타입 변환(DB의 데이터타입을 Java의 데이터타입으로 변환)

rs.getString(”name”);  // 홍길동을 java string 형태로 가져온다.
rs.getString(2); // 홍길동
// 5. 결과처리
while(rs.next()){ // rs 쭉 실행하기 -> 위에서부터 밑에까지 쭉 내려가세요
    String id = rs.getString(1);
    String name = rs.getString(2);
    String addr = rs.getString(3);
    System.out.println(id+" "+name+" "+addr);
}

Connection pool

- 동시에 많은 사용자에 대한 데이터베이스 쿼리를 제공하기 위해 사용한다.

- connection을 많은 사용자와 공유하게 되면? -> 트랜젝션 발생

- pooling 기법을 사용해서 해결한다.

 

 

pooling

- 속도 향상(생성과 소멸 과정X -> 반납 대여 과정)

- 자원의 효율성

- connection 수를 제어한다.

- 직접 구현하는 것이 아니라, Apache Commons의 DBCP 사용

 

 

Apache Commons 

- 재사용 가능한 자바 기반의 컴포넌트를 모아놓은 통합 프로젝트

- dbcp : Database connection pooling services

 

+ Recent posts