1. JDBC (Java Database Connectivity)
(1) 정의
JVM의 시스템과 DB시스템을 연결하고 통신하기 위한 JAVA 표준 스펙
(2) JDBC 프로그램 순서
<1> Driver 메모리에 로딩 (DB회사에서 JDBC스펙에 맞게 구현해 놓은 클래스들)
<2> DB와 연결 (Connection 객체 생성)
<3> SQL구문(쿼리) DB서버로 전송 (Statement or PreparedStatement 객체 생성)
<4> 쿼리 실행 (ResultSet 생성하거나 결과값을 받음)
<5> ResultSet 객체에서 원하는 값을 추출 (select일 경우)
<6> 위의 객체(Connection, Statement, ResultSet)들을 반드시 close() 해준다. (IO개념)
(3) Connection 을 가져오는 두가지 방법 : DriverManager 와 DataSource
http://java.sun.com/j2se/1.4.2/docs/guide/jdbc/getstart/datasource.html (원문) --> 5.0 API DOC에서 검색
http://xrath.com/devdoc/jdk1.5/ko/guide/jdbc/getstart/datasource.html (번역문)
http://xrath.com/devdoc/jdk1.5/ko/
<1> DriverManager : Class.forName으로 driver의 객체를 만들면 그 객체가 자동으로 DriverManager에
레지스터된다.
<2> DataSource : JNDI lookup을 일반적으로 사용하나 사용하지 않을 수도 있다.
- JNDI : Java Naming and Directory Interface 특정한 이름으로 분산 시스템의 특정 리소스나 객체에
접근 가능하게 해주는 기술
(4) Connection Pooling
일반적으로 Connection 을 여는 과정이 많아질 경우 DB에 너무 많은 과부하가 생길 수 있다.
그러한 단점을 극복하고자 일정량의 Connection 을 미리 만들어 놓고 그것을 필요에 따라서만
내어주는 방식을 취하는 것이 Connection Pooling 이다.
2. 주요 클래스
(1) Connection
(2) Statement
<1> 생성
con.createStatement();
<2> 실행
[1] SELECT문일 경우
--> ResultSet rs = stmt.executeQuery(sql);
[2] INSERT/UPDATE/DELETE 문일 경우
--> int n = stmt.executeUpdate(sql);
[3] 그 외, sql문일 경우
--> boolean b = stmt.execute(sql);
(3) ResultSet
<1> 생성 : stmt.executeQuery(sql);
<2> 실행(추출)
rs.next();
rs.getType(); --> 각 데이타타입에 따른 GET메소드.doc 참조
(4) PreparedStatement (준비된 Statement)
미리 SQL문이 세팅된 Statement가 DB에 전송되어져서 컴파일 되어지고,
SQL문의 ?만 나중에 세팅해서 실행이 되어지는 준비된 Statement.
<1> 장점
Statement 에 비해서 반복적인 SQL문을 사용할 때 더 빠르다.
(이유 : ?를 제외한 SQL문에 DB에서 미리 컴파일 되어져서 대기하고 있기 때문)
<2> 단점
SQL문마다 PreparedStatement 객체를 각각 생성해 줘야 한다.
(Statement 객체는 SQL문이 달라지더라도 한개만 생성해서 재사용가능)