우선 JDBC Driver의 종류에 대해 소개한다.
JDBC Driver종류
1 | JDBC/ODBC Bridge |
이것은 JDK1.2 부터 포팅되어 있으므로 추가로 설치할 필요는 없다. JDBC 함수호출을 ODBC 함수호출로 전환하기 때문에 만약 예전에 사용하던 환경이 ODBC 를 이용해 구축되어 있다면 굳이 다른 드라이버를 사용하지 않고서도 시스템을 확장해 나갈수가 있다. 하지만 ODBC 계층을 경유하기 때문에 데이타복사시 오버헤드를 야기하고, 클라이언트에는 반드시 ODBC DRIVER 가 설치돼 있어야 한다. 자바 하위버전에서는 추가로 JDBC DRIVER 까지 설치돼 있어야 함은 물론이다. 또한 ODBC 와 DB 간에 소켓을 사용하기 때문에 방화벽을 통과하지 못하기 때문에 익스트라넷 환경에서 사용할 수가 없다. 또한 ODBC 접속부분에서 100% 자바코드를 사용하지 않기 때문에 애플릿으로도 연결할 수가 없다. 굳이 사용하고자 한다면 ODBC 환경설정을 따르는 MS-SQL SERVER 에 적당하다 하겠다. |
2 | Native-API,Partly-Java Driver |
사용환경은 JDBC/ODBC 와 유사하다. 이것은 JDBC 호출을 특정데이타베이스에서 사용하는 API 로 전환한다. 이 드라이버 역시 C/C++ 코드로 네이티브 메소드를 사용하기 때문에 클라이언트에 해당 DB 의 라이브러리가 설치돼 있어야 한다. 자체 DB DLL 를 사용하기 때문에 JDBC/ODBC 보다는 속도 향상이 있다. 하지만 여전히 오버헤드 문제가 제기되고 방화벽을 통과하지 못하기 때문에 익스트라넷 환경에서는 사용할 수가 없다.
|
3 | Net-Protocol, All-Java Driver |
이것은 3-tier 모델이다. 클라이언트 측에는 드라이버 클래스와 API 가 위치하고, 실제 기능은 JDBC 미들웨어에서 구현한다. 클라이언트는 자바로 구현되기 때문에 애플릿을 통해 구현할 수 있으나 애플릿의 특성상 JDBC 미들웨어가 웹서버와 같은 호스트에 위치하여야 한다. 3-tier 환경이 주는 이점(다중 DB 접속, 질의 캐싱, 로드밸런싱,보안기능)을 이용할 수 있으며 대규머 클라이언트/서버 환경에 적합한 모델이다. 흔히 JDBC 미들웨어와의 표준프로토콜로서 CORBA 의 IIOP 나 HTTP 를 이용한다. 서버는 각 클라이언트의 요구는 DBMS 프로토콜로 바꿔 쿼리를 전달하며 반환된 결과값을 다시 클라이언트에 전달한다. 주로 통합 구성된 단일 드라이버 형태로 제공하며 멀티 DBMS 환경에 적합하다.
|
4 | Native-Protocol, All-Java Driver |
JDBC 호출을 바로 DBMS 가 사용하는 프로토콜로 전환해 DBMS 와 직접 연결해 준다. DBMS 의 모든 기능을 자바로 직접 구현하였기 때문에 ODBC 나 DB 라이브러리가 별도로 필요가 없으며 모든 드라이버가 자바로 구현됐기 때문에 애플릿으로도 다운로드돼 실행될 수가 있다. 가령,
|
다음 예제는 JDBC/ODBC Bridge Driver를 이용한 JAVA Source이다.
우선 MS Access DB로 만든 테이블을 를 제어판에서 등록한다.
이렇게 DB가 등록이 완료되면 코딩시작...
import java.sql.*;
import java.util.*;
import javax.swing.*;
public class AccessTest
{
public ResultSet resultSet; //질의문의 결과를 처리하는 클래스
public ResultSetMetaData metaData; //메타데이터
public int numberOfRows; //테이블의 행
public Connection db=null;
public Statement stmt=null;
String queryState="";
String sql = "SELECT * FROM Table1"; //테이블 명
static final String JDBC_ODBC_DRIVER="sun.jdbc.odbc.JdbcOdbcDriver";
static final String url="jdbc:odbc:dsn_db1"; //dsn_db1은 DB이름
public AccessTest()
{
try
{
/*JDBC - ODBC Bridge Driver Setting*/
Class.forName(JDBC_ODBC_DRIVER);
db=DriverManager.getConnection(url,"","");
//SQL문 작성을 위한 Statement를 준비
stmt=db.createStatement();
resultSet = stmt.executeQuery(sql); //query를 실행
//Query 실행값을 저장할 버퍼*/
StringBuffer results = new StringBuffer();
ResultSetMetaData metaData = resultSet.getMetaData(); //MetaData를 얻는다.
int numberOfColumns = metaData.getColumnCount(); //테이블의 컬럼개수를 가져온다.
while(resultSet.next())
{
for(int i=1;i<=numberOfColumns;i++)
results.append(resultSet.getObject(i)+"\t");
results.append("\n");
}
System.out.println(results);
} //try의 끝
catch(SQLException sqlException){
JOptionPane.showMessageDialog( null,sqlException.getMessage(), "DataBase ERROR",
JOptionPane.ERROR_MESSAGE );
System.exit(1);//비정상적으로 종료시킨다.
}
catch(ClassNotFoundException classNotFound){
JOptionPane.showMessageDialog(null,classNotFound.getMessage(),
"Driver Not Found",JOptionPane.ERROR_MESSAGE);
System.exit(1);
}
finally{
/*연결된 데이타베이스를 닫는다.*/
try{
stmt.close();
db.close();
}
catch(SQLException sqlException){
JOptionPane.showMessageDialog(null,
sqlException.getMessage(), "DataBase Error",
JOptionPane.ERROR_MESSAGE);
System.exit(1);
}
}
}
/*main Function*/
public static void main(String[] args)
{
AccessTest test = new AccessTest();
}
}
-실행결과-
1 backkmir
2 lathe
3 mir
Press any key to continue...
[출처] 자바와 MS Access DB연동|작성자 미르
'My work space > Java' 카테고리의 다른 글
java reverse engineering ( 자바 역공학 ) (0) | 2008.08.20 |
---|---|
정규식(Regular Expression) 표현법 및 예제 (0) | 2008.08.20 |
Log4J비용계산 (0) | 2008.08.20 |
싱글톤패턴(Single Pattern) (0) | 2008.08.20 |
class 안에서 callback함수 사용과, callback 함수 안에서 class 멤버/함수 변수 접근하기 (0) | 2008.08.20 |