JDBC

Retired DISLab
Swpark (토론 | 기여) 사용자의 2014년 1월 26일 (일) 00:50 버전
(비교) ← 이전 판 | 현재 판 (비교) | 다음 판 → (비교)
이동: 둘러보기, 찾기

JDBC-ODBC Bridge

JDBC-ODBC Bridge[1]ODBC를 통해서 JDBC 인터페이스로 데이터베이스를 사용하는 방법이다. Java에서 RDB를 엑세스하려면 JDBC를 이용해야 하는데 ODBC로 제공하고 있는 것이 있다면 이것을 JDBC 인터페이스로 접근할 수 있도록 JDBC-ODBC Bridge를 제공하고 있다.

ODBC 드라이버 만들기

ODBC 드라이버는 ODBC를 참고하여 만든다. 이 예에서는 mybank 드라이버를 만들었다.


JDBC-ODBC Bridge 예제

교과서에 나오는 예제 테이블 중 Customer와 Branch, 두 개의 테이블을 생성하고 이 테이블에 레코드를 삽입하는 예제이다.

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
 
public class Banking {
    public static void main(String[] argv) {
        // Load the JDBC-ODBC bridge driver
        try {
            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
        } catch (ClassNotFoundException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
 
        // setup the properties
        java.util.Properties prop = new java.util.Properties();
        //prop.put("charSet", "Big5");
        //prop.put("user", username);
        //prop.put("password", password);
 
        // Connect to the database
        try {
            Connection con = DriverManager.getConnection("jdbc:odbc:mybank", prop);
 
            createSchema(con);
 
            insertCustomers(con);
            insertBranches(con);
 
            retrieveBranches(con);
 
            dropTables(con);
 
            con.close();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
 
    }
 
    private static void createSchema(Connection con) throws SQLException {
        String customer_schema = "CREATE TABLE customer ("
                                  + "customer_name CHAR(20), "
                                  + "customer_street VARCHAR(30), "
                                  + "customer_city VARCHAR(20), "
                                  + "PRIMARY KEY(customer_name));";
 
        String branch_schema   = "CREATE TABLE branch ("
                                  + "branch_name CHAR(15), "
                                  + "branch_city VARCHAR(30), "
                                  + "assets INTEGER, "
                                  + "PRIMARY KEY(branch_name));";
 
        Statement stmt = con.createStatement();
        stmt.execute(customer_schema);
        stmt.execute(branch_schema);
        stmt.close();
    }
 
    /**
     * Customer 테이블에 레코드를 삽입한다.
     */
    private static void insertCustomers(Connection con) throws SQLException {
        String[] queries = { "INSERT INTO customer VALUES('Adams', 'Spring', 'Pittsfield');",
                             "INSERT INTO customer VALUES('Brooks', 'Senator', 'Brooklyn');",
                             "INSERT INTO customer VALUES('Curry', 'North', 'Rye');",
                             "INSERT INTO customer VALUES('Glenn', 'Sand Hill', 'Woodside');",
                             "INSERT INTO customer VALUES('Green', 'Walnut', 'Stamford');",
                             "INSERT INTO customer VALUES('Hayes', 'Main', 'Harrison');",
                             "INSERT INTO customer VALUES('Johnson', 'Alma', 'Palo Alto');",
                             "INSERT INTO customer VALUES('Jones', 'MAIN', 'Harrison');",
                             "INSERT INTO customer VALUES('Lindsay', 'Park', 'Pittsfield');",
                             "INSERT INTO customer VALUES('Smith', 'North', 'Rye');",
                             "INSERT INTO customer VALUES('Turner', 'Puthnam', 'Stamford');",
                             "INSERT INTO customer VALUES('Williams', 'Nassau', 'Princeton');" };
 
        con.setAutoCommit(false);
        Statement stmt = con.createStatement();
        for(String query : queries) {
            stmt.executeUpdate(query);
        }
        stmt.close();
        con.commit();
        con.setAutoCommit(true);
    }
 
    private static void insertBranches(Connection con) throws SQLException {
        String[][] records = {  { "Brighton", "Brooklyn", "7100000", },
                                { "Downtown", "Brooklyn", "9000000", },
                                { "Mianus", "Horseneck", "400000", },
                                { "North Town", "Rye", "3700000", },
                                { "Perryridge", "Horseneck", "1700000", },
                                { "Pownal", "Bennington", "300000", },
                                { "Redwood", "Palo Alto", "2100000", },
                                { "Round Hill", "Horseneck", "8000000" } };
 
        con.setAutoCommit(false);
        PreparedStatement stmt = con.prepareStatement("INSERT INTO branch VALUES(?, ?, ?);");
 
        for(String[] record : records) {
            stmt.setString(1, record[0]);
            stmt.setString(2, record[1]);
            stmt.setInt(3, Integer.parseInt(record[2]));
            stmt.execute();
        }
 
        stmt.close();
        con.setAutoCommit(true);
    }
 
    private static void retrieveBranches(Connection con) throws SQLException {
        Statement stmt = con.createStatement();
        ResultSet rset = stmt.executeQuery("SELECT * FROM branch;");
        while(rset.next()) {
            System.out.println(rset.getString(1) + "\t" 
                             + rset.getString("branch_city")
                             + "\t" + rset.getInt(3));
        }
        stmt.close();
    }
 
    private static void dropTables(Connection con) throws SQLException {
        Statement stmt = con.createStatement();
        stmt.execute("DROP TABLE customer;");
        stmt.execute("DROP TABLE branch;");
        stmt.close();
    }
}
개인 도구
이름공간
변수
행위
둘러보기
구성원
연구
연구실
기타
도구모음
인쇄/내보내기