Transcript JDBCInside

JDBC Concept&BASIC
App
Network Interface
JDBC Interface
MSSQL Driver
Informix Driver
Oracle Driver
SQL Request
SQL Results
Database
Server
Database Libraries
 JDBC(Java DataBase Connectivity)는 Java에서 DB에 접근할 수
있도록 제작된 API이며, 표준임.
 JDBC Driver가 SQL Request의 Translator역할을 함.(Vendor-specific)
본 presentation의 어떠한 그
림도 저작자(이동진)의 창작
물이므로 무단전재나 복사에
대해 법적으로 보호됨.
@Copyrights 2003.
JDBC Driver
Type I
JDBC-ODBC Bridge
Type II
Native-API
Type III
JDBC Net-Protocol
Type VI
Native-Protocol
Type 1 : JDBC-ODBC Bridge Driver
=> 기존의 ODBC와 ODBC DB Driver가 있어야 하며, 여기에 연결하여 사용.
Type 2 : Native-API Driver : OCI Driver (Partial Java Driver)
=> 기존의 Vendor-specific한 DB API(CLI<-Native Database Libraries)나 Library를 사용하여, 일
부가 Java 구현됨.
Type 3 : Net-Protocol Driver (Pure Java Driver)
=> 표준화된 JDBC Middleware가 필요함.(Server Driver + Client Driver)
Type 4 : Native-Protocol Driver : Thin Dirver (Pure Java Driver)
=> DB와 직접 작용함.(DB의 protocol을 알고 있어야 제작가능)
JDBC 1.1 API Review
JDBC Interface(java.sql)
Driver
Connection
Statement
ResultSet
PreparedStatement
CallableStatement
< JDBC 2.0 Spec에서 추가된 부분 >
Array
Blob
Clob
ParameterMetaData
Ref
Savepoint
SQLData
SQLInput
SQLOutput
Struct
ResultSetMetaData
DatabaseMetaData
javax.sql
JDBC Interface(javax.sql)
< Interface >
ConnectionEventListener
ConnectionPoolDataSource
DataSource
PooledConnection
RowSet
RowSetInternal
RowSetListener
RowSetMetaData
RowSetReader
RowSetWriter
XAConnection
XADataSource
Classes
< Class >
ConnectionEvent
RowSetEvent
Connection
Management
JNDI DataSource
Access
JavaBeans
Support
PreparedStatement&CallableStatement
Statement
String strEmpNo = null;
PreparedStatement
CallableStatement
CallableStatement cstmt = con.prepareCall(“{call increase(?, ?)}”);
cstmt.setString(1, “strValue”);
cstmt.setDouble(2, 0.05);
cstmt.executeUpdate();
String strEmpNo = null;
Statement stmt = con.createStatment();
stmt.executeQuery(“ SELECT empno, empname, dept_cd, grade_cd FROM emp WHERE empno = “’ + strEmpNo
+ ”’ ”);
* boolean execute(sql)/ResultSet executeQuery(sql)/int executeUpdate(sql)
PreparedStatment pstmt = con.prepareStatement(“SELECT empno, empname, dept_cd, grade_cd FROM emp
WHERE ? “);
pstmt.setString(1, strEmpNo);
pstmt.executeQuery();
* boolean execute()/ResultSet executeQuery()/int executeUpdate()
JDBC 2.0 for Oracle
1. Driver를 Loading한다.
Driver를 Loading하는 방법은 여러 가지가 있으나 Class.forName()메소드를 이용하여 동적으로
JDBC 드라이버 클래스를 로딩(Loading)하는 방법을 일반적으로 사용한다.
Oracle thin Driver의 경우: Class.forName("oracle.jdbc.driver.OracleDriver");
2. DB와 연결하여 Connection을 획득한다.
Connection객체를 획득하기 위하여 획득한 DriverManager의 getConnection()메소드를 이용한다.
Connection con = DriverManager.getConnection(url , user, password);
3. Connection으로부터 SQL을 실행하기 위한 Statement Object를 획득한다.
Statement객체는 Connection객체의 createStatement()메소드를 이용하여 획득한다.
Statement stmt=con.createStatement();
4. Statement Object의 API를 이용하여 SQL을 실행한다.
Statement객체를 통해 SQL을 발행한다.
ResultSet rset=stmt.executeQuery("SELECT * FROM EMP");
5. ResultSet Object에 있는 결과를 Looping을 돌면서 처리한다.
while(rset.next()) rset.getString(1);
6. 사용한 Connection객체와 Statement객체를 close한다.
con.close();
stmt.close();
JDBC MISC
1. JDBC DataType과 SQL DataType
=> Mapping Table
2. Database MetaData
=> 시스템 catalog, key관련사항, table의 관련사항, Transaction과 관련된 사항
3. Transaction Issue
=> autocommit, commit, rollback..
4. Exception Issue
=> SQLException, SQLWarning, DataTruncation, BatchUpdateException(JDBC 2.0)
getErrorCode() : 각 DB에서 제공하는 Error Code를 Return한다.
getNextException() : 연결된 다른 SQLException을 Return한다.
getSQLState()Exception : 발생시 SQL상태를 알 수 있다.
getMessage() : Error Message를 얻어온다.(java.lang.Throwable)
setNextException() : Exception을 별도로 Set할 때 사용한다.
5. Connection Pooling
=> Connection Pooling Manager를 구현하여 사용함. Open Source나 Commercial로 사용.