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

Java JDBC 編程總結:核心原理、標準流程、實戰範例與生產級避坑指南

     編輯:Java 相關知識

前言:JDBC 是數據訪問的基石

JDBC 是 Java 操作數據庫的基礎技術規範,非唯一技術。Hibernate、TopLink 等 ORM 構建於 JDBC 之上,性能有差距,但若 JDBC 用不好,還不如 ORM。本文系統總結 JDBC 核心原理、編程步驟、實戰範例、避坑鐵律,夯實基本功。

一、JDBC 基本原理

  • 定義一組標準操作數據庫接口
  • 各數據庫廠商實現接口,打包為 JDBC 驅動(Jar 包)
  • 開發者僅面向標準接口編程,屏蔽底層實現差異
  • 驅動類加載進 JVM → DriverManager 管理 → 獲取 Connection

二、JDBC 編程標準六步法

  1. 構建 JDBC URL:jdbc:subprotocol:subname//host:port/dbname
    例:jdbc:mysql://192.168.3.143:3306/zfvims
  2. 加載驅動類:
    • Class.forName("com.mysql.jdbc.Driver")
    • 或設置系統屬性 jdbc.drivers
    • 注意:單純加入 CLASSPATH 不夠,JVM 需顯式加載
  3. 獲取連接:DriverManager.getConnection(url, user, pwd) → Connection 對象(表示數據庫會話,耗資源,用畢必關)
  4. 創建 Statement:
    • conn.createStatement() → Statement(靜態 SQL)
    • conn.prepareStatement(sql) → PreparedStatement(參數化動態 SQL,預編譯、防注入、性能優)
  5. 執行與結果處理:
    • 查詢:executeQuery(sql) → ResultSet(游標遍歷 next()、getXxx()、可獲取元數據)
    • 更新:executeUpdate(sql) → 影響行數
  6. 關閉資源:ResultSet → Statement → Connection 逆序關閉,**必在 finally / try-with-resources 中**

三、最小化實戰範例:MySQL 查詢省份表

public class JdbcDemo {
    public static Connection getConnection() throws SQLException {
        try { Class.forName("com.mysql.jdbc.Driver"); }
        catch (ClassNotFoundException e) { throw new SQLException("驅動加載失敗", e); }
        return DriverManager.getConnection(
            "jdbc:mysql://192.168.3.143:3306/zfvims", "lavasoft", "password");
    }
    
    public static void queryProvinces() {
        String sql = "SELECT code, name FROM province ORDER BY code";
        try (Connection conn = getConnection();
             Statement stmt = conn.createStatement(
                 ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);
             ResultSet rs = stmt.executeQuery(sql)) {
            
            while (rs.next()) {
                System.out.println(rs.getString("code") + " " + rs.getString("name"));
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
    
    public static void main(String[] args) { queryProvinces(); }
}

四、JDBC 生產級避坑鐵律(必讀)

  1. Connection 必須在 finally / try-with-resources 中關閉——防洩漏導致連接池耗盡、應用掛起
  2. Statement、ResultSet 縮小作用域——方法局部變量,用完即關,不作為字段長期持有
  3. Statement 可復用,但同一時刻僅關聯一個 ResultSet——新查詢會關閉舊 ResultSet
  4. ResultSet 隨 Connection/Statement 關閉自動關閉——但顯式關閉更安全、語義更清晰
  5. 優先使用 PreparedStatement——防 SQL 注入、預編譯性能優、參數化清晰、支援批量
  6. 批量操作用 addBatch / executeBatch——大幅降低網絡往返
  7. 事務邊界明確管理:
    • conn.setAutoCommit(false)
    • 執行多條 SQL
    • conn.commit() / conn.rollback()
    • finally { conn.setAutoCommit(true); } 恢復默認
  8. 大數據量分頁查詢:使用數據庫原生 LIMIT/OFFSET 或游標,避免全量載入內存
  9. 異常處理:捕獲 SQLException,記錄 SQL 狀態碼、錯誤碼、堆棧,轉換為業務異常拋出

五、進階延伸:從 JDBC 到現代數據訪問棧

層級技術代表核心價值
基石JDBC (DriverManager, DataSource)標準接口、驅動管理、連接獲取
連接池HikariCP, Druid, DBCP高性能連接複用、監控、防洩漏
模板封裝Spring JdbcTemplate, Apache DbUtils資源管理模板化、異常轉換、RowMapper
ORMHibernate, MyBatis, JPA/EclipseLink對象關係映射、緩存、延遲加載、查詢語言
類型安全 SQLjOOQ, QueryDSL編譯期 SQL 檢查、流式 API、複雜查詢構建
響應式R2DBC, Spring Data R2DBC非阻塞數據庫訪問、背壓、異步流

總結

JDBC 雖「底層」,卻是所有上層框架的根基。精通 JDBC 六步法、資源管理鐵律、PreparedStatement 參數化、事務邊界控制,是 Java 後端工程師的必修內功。無論框架如何演進,Connection → Statement → ResultSet 的核心模型永不落伍。夯實基本功,上層建築才穩固。

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