首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

自製 Type 3 JDBC 驅動架構設計與實作指南(一):三層網路協議模型

     編輯:Java 相關知識

JDBC 驅動四大類型回顧

類型名稱特徵
Type 1JDBC-ODBC Bridge架設於 ODBC,非純 Java
Type 2Native API部分 Java + 本地程式碼
Type 3Network Protocol純 Java,三層架構,中介層轉發
Type 4Native Protocol純 Java,直連資料庫專有協議

所有驅動必須實作四大核心類:Driver、Connection、Statement、ResultSet。DriverManager 管理已載入驅動,客戶端透過 getConnection() 取得連線。

Type 3 驅動優勢與適用場景

  • 無需客戶端配置,適合 Internet/Intranet Applet 應用
  • 中介層提供彈性系統管理工具(連線池、日誌、安全控制)
  • 將現有 Type 1/2 驅動升級為 Type 3,提升部署效率與穩定性

自製 Type 3 驅動「JWDriver」三層架構

客戶層 com.jw.client

提供標準 JDBC 介面實作:

  • JWDriver:實作 java.sql.Driver
  • JWConnection:實作 Connection
  • JWStatement:實作 Statement
  • JWResultSet:實作 ResultSet

客戶端應用(含 Applet)直接使用這些類,內部透過 RMI 與中介層通訊。

中介層(服務層)com.jw.server

RMI 伺服器,透過 JDBC-ODBC Bridge 連接資料庫。包含四個遠端介面及其實作:

  • IRemoteDriver、IRemoteConnection、IRemoteStatement、IRemoteResultSet

實作類內部持有對應的 JDBC-ODBC Bridge 物件,接收客戶層 RMI 呼叫後轉發給本地 JDBC 物件執行。

核心類別互動流程

JWDriver 載入與註冊

static {
    JWDriver driverInst = new JWDriver();
    DriverManager.registerDriver(driverInst);
    System.setSecurityManager(new RMISecurityManager());
}

靜態區塊在 Class.forName("com.jw.client.JWDriver") 時執行。

取得連線流程

  1. 應用呼叫 DriverManager.getConnection(url)
  2. JWDriver.connect(url) 驗證 URL 格式
  3. 若遠端驅動引用不存在,透過 RMI Registry 查找:
    remoteDriver = (IRemoteDriver) Naming.lookup("rmi://"+serverName+":1099/RemoteDriver")
  4. 呼叫 remoteDriver.getConnection() 取得遠端連線物件
  5. 包裝為 JWConnection 回傳應用

建立 Statement 流程

public Statement createStatement() throws SQLException {
    IRemoteStatement remStmt = (IRemoteStatement) remoteConnection.createStatement();
    JWStatement localStmt = new JWStatement(remStmt);
    return localStmt;
}

客戶層 JWConnection 持有 IRemoteConnection 參考,透過 RMI 呼叫中介層建立 Statement,再包裝為本地 JWStatement 回傳。

下一步預告

第二部分將詳細講解:完整原始碼實作、編譯部署步驟、ResultSet 遠端迭代機制。第三部分將增強進階特性:SQL 審計日誌、連線池、預處理資料集。

參考閱讀

建議先閱讀 Nitin Nanda《JDBC Drivers in the Wild》奠定驅動架構基礎概念。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved