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

JDBC 入門教程:MySQL 驅動配置、核心 API 與 CRUD 完整示例

     編輯:Java 綜合教學

JDBC 入門教程:MySQL 驅動配置、核心 API 與 CRUD 完整示例

JDBC (Java Database Connectivity) 是 Java 訪問關係型數據庫的標準 API。本文以 MySQL 為例,涵蓋驅動安裝、連接建立、Statement/PreparedStatement 增刪改查、資源關閉與異常處理。

環境準備

  1. 下載 mysql-connector-java-x.x.x.jar(Maven: mysql:mysql-connector-java)。
  2. Eclipse: 右鍵專案 → Build Path → Add External JARs 導入;或 Maven 專案直接加依賴。

核心步驟

// 1. 加載驅動 (JDBC 4.0+ 可省略,SPI 自動加載)
Class.forName("com.mysql.cj.jdbc.Driver"); // 8.0+ 驅動類名

// 2. 建立連接
String url = "jdbc:mysql://127.0.0.1:3306/mydb?useSSL=false&serverTimezone=UTC";
Connection conn = DriverManager.getConnection(url, "root", "password");

// 3. 創建 Statement
Statement stmt = conn.createStatement();

// 4. 執行 SQL
// 增刷改
int rows = stmt.executeUpdate("INSERT INTO xs VALUES ('51','aa','1011')");
// 查詢
ResultSet rs = stmt.executeQuery("SELECT * FROM xs");

// 5. 處理結果集
while (rs.next()) {
    System.out.println(rs.getString(1) + "\t" + rs.getString(2));
}

// 6. 關閉資源 (逆序)
rs.close();
stmt.close();
conn.close();

完整 CRUD 示例

public class JdbcDemo {
    static final String URL = "jdbc:mysql://localhost:3306/test?useSSL=false&serverTimezone=UTC";
    static final String USER = "root";
    static final String PASS = "123456";

    public static void main(String[] args) {
        try (Connection conn = DriverManager.getConnection(URL, USER, PASS)) {
            // 建表
            try (Statement st = conn.createStatement()) {
                st.execute("CREATE TABLE IF NOT EXISTS student (id INT PRIMARY KEY, name VARCHAR(20), age INT)");
            }

            // 插入 (PreparedStatement 防注入)
            String sql = "INSERT INTO student VALUES (?, ?, ?)";
            try (PreparedStatement ps = conn.prepareStatement(sql)) {
                ps.setInt(1, 1); ps.setString(2, "張三"); ps.setInt(3, 20);
                ps.addBatch();
                ps.setInt(1, 2); ps.setString(2, "李四"); ps.setInt(3, 21);
                ps.addBatch();
                ps.executeBatch();
            }

            // 查詢
            try (Statement st = conn.createStatement();
                 ResultSet rs = st.executeQuery("SELECT * FROM student")) {
                while (rs.next()) {
                    System.out.printf("ID:%d Name:%s Age:%d%n", rs.getInt("id"), rs.getString("name"), rs.getInt("age"));
                }
            }

            // 更新
            try (PreparedStatement ps = conn.prepareStatement("UPDATE student SET age=? WHERE id=?")) {
                ps.setInt(1, 22); ps.setInt(2, 1);
                ps.executeUpdate();
            }

            // 刪除
            try (PreparedStatement ps = conn.prepareStatement("DELETE FROM student WHERE id=?")) {
                ps.setInt(1, 2);
                ps.executeUpdate();
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

關鍵最佳實踐

  • PreparedStatement:預編譯、防 SQL 注入、批量執行 addBatch/executeBatch。
  • try-with-resources:自動關閉 Connection/Statement/ResultSet,防洩漏。
  • 連接池:生產環境必須使用 HikariCP、Druid、C3P0,避免頻繁創建銷毀連接。
  • 事務控制:conn.setAutoCommit(false) → 多條 SQL → conn.commit() / conn.rollback()。
  • 驅動類名:MySQL 8.0+ 使用 com.mysql.cj.jdbc.Driver,舊版 com.mysql.jdbc.Driver 已棄用。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved