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

JDBC 核心基礎入門:從驅動加載到 CRUD 實戰全解析

     編輯:Java 綜合教學

JDBC 核心基礎入門

JDBC (Java Database Connectivity) 是 Java 應用與關係型數據庫交互的基石。掌握其核心架構與操作流程,是進行企業級開發的必備技能。本文系統梳理 JDBC 核心概念、三大接口、標準操作步驟,並提供完整 CRUD 代碼範本。

核心概念速覽

概念說明
JDBC 本質Sun 公司定義的規範/接口,由各數據庫廠商實現驅動
核心 API 包java.sql、javax.sql
關鍵類/接口DriverManager、Connection、Statement、ResultSet
核心功能建立連接、執行 SQL、處理結果集

JDBC 三大核心接口

🔗 Connection

職責:數據庫連接對象,代表通信通道

核心方法:

  • createStatement() - 創建 Statement
  • prepareStatement(sql) - 創建 PreparedStatement
  • setAutoCommit(false) - 開啟事務
  • commit()/rollback() - 事務提交/回滾

📝 Statement

職責:SQL 執行器,發送 SQL 語句

核心方法:

  • executeQuery(sql) - 執行查詢,返回 ResultSet
  • executeUpdate(sql) - 執行增刪改,返回影響行數
  • addBatch(sql) - 批量處理

📊 ResultSet

職責:結果集游標,封裝查詢結果

核心方法:

  • next() - 游標下移,返回 boolean
  • getXxx(index/columnName) - 獲取列值
  • getMetaData() - 獲取元數據

標準操作五步曲

  1. 加載驅動:Class.forName("com.mysql.cj.jdbc.Driver")
  2. 建立連接:DriverManager.getConnection(url, user, pwd)
  3. 創建語句:conn.createStatement() 或 conn.prepareStatement(sql)
  4. 執行 SQL:executeQuery() / executeUpdate()
  5. 釋放資源:反向關閉 ResultSet → Statement → Connection

實戰代碼範本

通用數據庫操作模板

public class JdbcTemplate {
    // 數據庫配置常量
    private static final String URL = "jdbc:mysql://localhost:3306/dbname?useSSL=false&serverTimezone=UTC";
    private static final String USER = "root";
    private static final String PASSWORD = "123456";
    
    // 獲取連接
    public static Connection getConnection() throws SQLException {
        return DriverManager.getConnection(URL, USER, PASSWORD);
    }
    
    // 通用查詢(返回 List<Map>)
    public static List<Map<String, Object>> query(String sql, Object... params) {
        List<Map<String, Object>> results = new ArrayList<>();
        try (Connection conn = getConnection();
             PreparedStatement ps = conn.prepareStatement(sql)) {
            
            // 綁定參數
            for (int i = 0; i < params.length; i++) {
                ps.setObject(i + 1, params[i]);
            }
            
            try (ResultSet rs = ps.executeQuery()) {
                ResultSetMetaData meta = rs.getMetaData();
                int columnCount = meta.getColumnCount();
                
                while (rs.next()) {
                    Map<String, Object> row = new HashMap<>();
                    for (int i = 1; i <= columnCount; i++) {
                        row.put(meta.getColumnLabel(i), rs.getObject(i));
                    }
                    results.add(row);
                }
            }
        } catch (SQLException e) {
            throw new RuntimeException("查詢失敗: " + sql, e);
        }
        return results;
    }
    
    // 通用增刪改
    public static int update(String sql, Object... params) {
        try (Connection conn = getConnection();
             PreparedStatement ps = conn.prepareStatement(sql)) {
            
            for (int i = 0; i < params.length; i++) {
                ps.setObject(i + 1, params[i]);
            }
            return ps.executeUpdate();
        } catch (SQLException e) {
            throw new RuntimeException("執行失敗: " + sql, e);
        }
    }
}

CRUD 具體示例

// 查詢所有用戶
List<Map> users = JdbcTemplate.query("SELECT id, username, email FROM users");

// 條件查詢
List<Map> user = JdbcTemplate.query("SELECT * FROM users WHERE id = ?", 1);

// 新增用戶
int rows = JdbcTemplate.update(
    "INSERT INTO users(username, email, created_at) VALUES (?, ?, NOW())",
    "zhangsan", "zhang@example.com"
);

// 修改郵箱
rows = JdbcTemplate.update(
    "UPDATE users SET email = ? WHERE id = ?",
    "new@example.com", 1
);

// 刪除用戶
rows = JdbcTemplate.update("DELETE FROM users WHERE id = ?", 1);

進階必知要點

  • PreparedStatement 防注入:預編譯機制自動處理特殊字符,嚴禁拼接 SQL
  • 事務控制:conn.setAutoCommit(false) 開啟,業務邏輯完成後 commit(),異常時 rollback()
  • 連接池優化:生產環境必須使用 HikariCP/Druid 等連接池,避免頻繁創建銷毀連接
  • 資源管理:JDK 7+ 推薦使用 try-with-resources 自動關閉資源
  • 批量操作:大量數據導入時使用 addBatch() + executeBatch() 提升性能

常見錯誤避坑指南

錯誤現象原因分析解決方案
ClassNotFoundException驅動包未導入或版本不匹配Maven 引入正確版本驅動依賴
Communications link failureURL/IP/端口錯誤、防火牆攔截檢查數據庫服務狀態、網絡連通性、配置參數
SQL 語法錯誤保留字衝突、引號缺失表名/列名加反引號 ` `,使用 PreparedStatement
中文亂碼字符集不一致URL 添加 characterEncoding=utf8,數據庫表 charset=utf8mb4

掌握 JDBC 基礎後,建議進一步學習連接池原理、ORM 框架(MyBatis/JPA)、分布式事務等進階主題。記住:參數化查詢是安全的基石,連接池是性能的保障。

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