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

JDBC 連接 MySQL 數據庫基礎實現代碼

     編輯:Java 相關知識

核心工具類 (BaseDao)

package com.abc.dao;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class BaseDao {
    
    /** 獲取數據庫連接 */
    public Connection getConn() {
        Connection conn = null;
        try {
            // 1. 加載驅動類 (JDBC 4.0+ 可省略,DriverManager 會自動發現)
            Class.forName("com.mysql.jdbc.Driver");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
        
        // 2. 建立連接
        String url = "jdbc:mysql://127.0.0.1:3306/user";
        try {
            conn = DriverManager.getConnection(url, "root", "");
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return conn;
    }
    
    /** 統一關閉資源 (按創建順序反向關閉) */
    public void closeAll(ResultSet rs, Statement stat, Connection conn) {
        if (rs != null) {
            try { rs.close(); } catch (SQLException e) { e.printStackTrace(); }
        }
        if (stat != null) {
            try { stat.close(); } catch (SQLException e) { e.printStackTrace(); }
        }
        if (conn != null) {
            try { conn.close(); } catch (SQLException e) { e.printStackTrace(); }
        }
    }
}

關鍵步驟解析

  1. 加載驅動:Class.forName("com.mysql.jdbc.Driver") 註冊驅動至 DriverManager。MySQL 8.0+ 驅動類為 com.mysql.cj.jdbc.Driver,URL 需加 ?useSSL=false&serverTimezone=UTC。
  2. 建立連接:DriverManager.getConnection(url, user, password) 返回 Connection 對象,代表物理會話。
  3. 資源關閉:ResultSet → Statement → Connection 逆序關閉,防止連接洩漏。Java 7+ 建議使用 try-with-resources 自動管理。

現代化改進版 (Java 7+)

public class JdbcTemplate {
    private static final String URL = "jdbc:mysql://localhost:3306/mydb?useSSL=false&serverTimezone=UTC";
    private static final String USER = "root";
    private static final String PASS = "password";
    
    static {
        try { Class.forName("com.mysql.cj.jdbc.Driver"); } 
        catch (ClassNotFoundException e) { throw new RuntimeException("驅動加載失敗", e); }
    }
    
    /** 通用查詢模板 */
    public <T> List<T> query(String sql, RowMapper<T> mapper, Object... params) {
        try (Connection conn = DriverManager.getConnection(URL, USER, PASS);
             PreparedStatement ps = conn.prepareStatement(sql)) {
            
            // 綁定參數防止 SQL 注入
            for (int i = 0; i < params.length; i++) {
                ps.setObject(i + 1, params[i]);
            }
            
            try (ResultSet rs = ps.executeQuery()) {
                List<T> results = new ArrayList<>();
                while (rs.next()) {
                    results.add(mapper.mapRow(rs));
                }
                return results;
            }
        } catch (SQLException e) {
            throw new RuntimeException("查詢執行失敗: " + sql, e);
        }
    }
    
    /** 通用增刪改模板 */
    public int update(String sql, Object... params) {
        try (Connection conn = DriverManager.getConnection(URL, USER, PASS);
             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);
        }
    }
    
    @FunctionalInterface
    public interface RowMapper<T> {
        T mapRow(ResultSet rs) throws SQLException;
    }
}

使用示例

JdbcTemplate jdbc = new JdbcTemplate();

// 查詢
List<User> users = jdbc.query(
    "SELECT id, username, email FROM users WHERE status = ?", 
    rs -> new User(rs.getInt("id"), rs.getString("username"), rs.getString("email")),
    1
);

// 新增
int rows = jdbc.update(
    "INSERT INTO users(username, email, status) VALUES (?, ?, ?)",
    "張三", "zhangsan@example.com", 1
);

連接池升級建議

生產環境絕不可直接使用 DriverManager 頻繁創建連接,必須引入連接池:

  • HikariCP:Spring Boot 2.x 默認,性能最優
  • Druid:阿里出品,監控功能強大
  • DBCP2:Apache 經典實現
<!-- HikariCP Maven 依賴 -->
<dependency>
    <groupId>com.zaxxer</groupId>
    <artifactId>HikariCP</artifactId>
    <version>5.0.1</version>
</dependency>

總結

本文提供了 JDBC 連接 MySQL 的最基礎實現,適合理解底層原理。實際開發中請直接使用 Spring JdbcTemplate、MyBatis 或 JPA/Hibernate 等成熟框架,並配置高性能連接池,專注於業務邏輯而非樣板代碼。

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