JDBC 簡介

Sidney發表於2015-01-27

JDBC API

JDBC 是 Java 資料庫連線(__J__ava __D__ata__B__ase __C__onnectivity) 的縮寫, 它提供了 Java 訪問各種關係型資料庫的一系列 API, 功能包括:

  • 建立資料庫連線
  • 建立 SQL 語句
  • 執行 SQL 語句
  • 檢視或修改結果集

JDBC API 中主要幾個介面:

  • DriverManager: 由於 Java 程式可能會操作多個資料庫, 所以我們可能需要來自於不同資料庫的連線. Driver Manager 就是用來管理一個或多個資料庫驅動, 並根據需要返回不同的連線.
  • Driver: 用於管理於資料庫的通訊. 由 Driver Manager 內部管理, 一般很少直接適用 Driver 類, 更多的是使用 Driver Manager.
  • Connection : 提供了與資料庫互動的所有方法.
  • Statement : 提供了與 SQL包 括儲存過程 相關的操作.
  • ResultSet: 提供了與 SQL 查詢返回結果集相關的操作
  • SQLException: 處理與資料庫操作相關的異常

JDBC 驅動

JDK 中只定義了運算元據庫相關的 API, 這些介面的實現, 也就是對不同資料操作的實現, 並不可能包含在 JDK 中. 這些介面一般都由第三方實現, 被稱為 JDBC 驅動(driver).

JDBC 驅動的實現方式主要有四種:

1) JDBC-ODBC 橋. JDBC 驅動由 ODBC 橋接而來, 在 JAVA 剛出來的時候, 支援 ODBC 的驅動佔絕大多數, 所以讓這些資料庫能支援 Java 的最快方式就是橋接:

JDBC Driver Type 1

2) Native-API 驅動. 對 JDBC API 的呼叫將會被轉化成本地 C/C++ 驅動的呼叫, 這種方式比起第一種方式要快一些, 因為它沒有了對 ODBC 的呼叫. 但是這種也是有侷限的, 由於這些 C/C++ 本地驅動是由資料庫廠商提供, 如果要更換資料庫, 那麼這些這些程式碼也要修改.

JDBC Driver Type 2

Oracle Call Interface (OCI) 就是屬於這種型別, 以下是 JDBC 呼叫 OCI 的一個例子:

    String  query  = "select /*+ result_cache */ * from emp where empno < : 1";
       ((oracle.jdbc.OracleConnection)conn).setImplicitCachingEnabled(true);
       ((oracle.jdbc.OracleConnection)conn).setStatementCacheSize(10);
       PreparedStatement  pstmt;
       ResultSet rs;

        for (int j = 0 ; j < 10 ; j++ )
        {
           pstmt  = conn.prepareStatement (query);
           pstmt.setInt(1,7500);
           rs  = pstmt.executeQuery();
             while (rs.next( ) )
            {     // see the values  }
              rs.close;
              pstmt.close( ) ;
            }
        }

3) 純Java中介軟體驅動. 使用了三層結構, 本地的 JDBC API 呼叫通過網路協議傳送到中介軟體伺服器, 中介軟體伺服器解析後再呼叫實際的JDBC驅動(1,2,4型).如圖:

JDBC Driver Type 3

4) 純Java驅動. 資料庫廠商提供了 Java 驅動, 它比起第一和第二種型別驅動要快, 並且不像第三種驅動那樣依賴網路.

JDBC Driver Type 3