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

JDBC 基礎教學:Connection 連線物件完整指南——URL 語法、交易管理與隔離等級

     編輯:Java 相關知識

前言:Connection 代表資料庫會話

Connection 封裝單一資料庫連線,包含該連線上執行的 SQL 語句與結果。應用可對單一資料庫建立多連線,或連接多個資料庫。

一、建立連線與 URL 語法

標準做法

String url = "jdbc:odbc:wombat";
Connection con = DriverManager.getConnection(url, "oboy", "12Java");

DriverManager 遍歷已註冊驅動,尋找支援該 URL 的驅動建立連線。

URL 通用結構

protocol:subprotocol:subname (JDBC 固定協議為 jdbc):

  • subprotocol:驅動名稱或連線機制 (如 odbc 保留給 JDBC-ODBC Bridge)。
  • subname:識別資料庫的方式,視 subprotocol 而異。可包含主機/埠號://hostname:port/subprotocol。

範例:

jdbc:odbc:fred                          // 本地 ODBC 資料源
jdbc:dcenaming:accounts-payable         // DCE 命名服務解析邏輯名稱
jdbc:dbnet://wombat:356/fred            // 網路協議 dbnet 連接遠端主機

ODBC 子協議特殊語法

允許屬性值對:jdbc:odbc:<資料源>[;<屬性>=<值>]*

jdbc:odbc:wombat;CacheSize=20;ExtensionCase=LOWER
jdbc:odbc:qeora;UID=kgh;PWD=fooey

子協議名稱註冊

驅動開發者可向 Sun 申請保留子協議名稱 (如 miracle 給 Miracle DBMS),避免衝突。郵件至 jdbc@wombat.eng.sun.com 申請。

二、傳送 SQL 語句:三大 Statement 類別

Connection 提供三個工廠方法:

介面建立方法用途
StatementcreateStatement()簡單 SQL (無參數)
PreparedStatementprepareStatement(sql)帶 IN 參數的預編譯 SQL,重複執行效率高
CallableStatementprepareCall(sql)呼叫預存程序,支援 IN/OUT/INOUT 參數

選擇指南:無參數用 createStatement;有 IN 參數或頻繁執行用 prepareStatement;呼叫預存程序用 prepareCall。

三、交易管理

自動提交模式 (預設)

每條語句執行完自動 commit(),單語句即一交易。

手動交易控制

con.setAutoCommit(false) 關閉自動提交,交易延遲至顯式呼叫 commit() 或 rollback(),包含上次提交/回滾以來所有語句。
優勢:多語句原子性——全成或全敗。範例:兩筆更新同成敗:

con.setAutoCommit(false);
try {
    stmt.executeUpdate("UPDATE accounts SET balance = balance - 100 WHERE id = 1");
    stmt.executeUpdate("UPDATE accounts SET balance = balance + 100 WHERE id = 2");
    con.commit();  // 雙雙生效
} catch (SQLException e) {
    con.rollback();  // 雙雙復原
}

四、交易隔離等級

並發交易衝突類型:髒讀 (讀未提交)、不可重複讀、幻讀。JDBC 定義五級隔離 (介面常數):

等級常數髒讀不可重複讀幻讀並發度
TRANSACTION_NONE---最高 (不支援交易)
TRANSACTION_READ_UNCOMMITTED允許允許允許最高
TRANSACTION_READ_COMMITTED防止允許允許高
TRANSACTION_REPEATABLE_READ防止防止允許中
TRANSACTION_SERIALIZABLE防止防止防止最低 (完全序列化)

設定方式:con.setTransactionIsolation(TRANSACTION_READ_COMMITTED)。新等級對該連線餘下時間生效。
注意:交易中途變更隔離等級會觸發隱性 commit(),**強烈不建議**。單一交易需特殊隔離等級,應在交易開始前設定、結束後復原。

實際支援等級取決於 DBMS 能力,可透過 DatabaseMetaData 查詢。

結語

掌握 JDBC URL 語法規範、三大 Statement 分工、交易原子性控制與隔離等級權衡,是建立穩健資料庫應用的核心能力。讓 DriverManager 處理驅動選擇,專注於交易邏輯與 SQL 優化。

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