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
'프로그래밍 > JAVA' 카테고리의 다른 글
[Java] 자바 - call by value & reference, 자바 특징, Java 8, primitive &reference type (1) | 2022.10.03 |
---|---|
[Java] 접근 제어자, 래퍼 클래스, 제너릭, 컬렉션, 스트림, 람다식, Optional (0) | 2022.10.02 |
[Java] 스레드 상태 제어 - sleep, join, yield, interrupt (0) | 2022.07.17 |
[Java] 스레드 생성 방법 - extends vs runnable (0) | 2022.07.17 |
[Java] 스레드 풀(ThreadPool) (0) | 2022.07.17 |