首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

JDBC操作MySQL完整實戰:從基礎查詢到PreparedStatement、批處理、事務管理六大核心模式

     編輯:MySQL 資料庫相關知識

JDBC核心流程(六步曲)

  1. 註冊驅動:Class.forName("com.mysql.cj.jdbc.Driver") (8.0+包名變更)
  2. 獲取連接:DriverManager.getConnection(url, user, pwd)
  3. 創建Statement:conn.createStatement() 或 conn.prepareStatement(sql)
  4. 執行SQL:executeQuery()/executeUpdate()/execute()
  5. 處理結果集:ResultSet.next() 循環 getXxx()
  6. 關閉資源:RS → ST → Conn 逆序關閉,finally塊中逐個判空關閉

準備工作

CREATE DATABASE person;
USE person;
CREATE TABLE student (id INT, name VARCHAR(20), birth YEAR) CHARSET=utf8mb4;
INSERT INTO student VALUES (1,'張三',1990),(2,'李四',1991),(3,'王五',1992);

下載 mysql-connector-java-x.x.x.jar 加入Classpath(IDE/構建工具管理依賴)。

模式一:基礎查詢(Statement)

Connection conn = DriverManager.getConnection(url, user, pwd);
Statement st = conn.createStatement();
ResultSet rs = st.executeQuery("SELECT * FROM student");
while (rs.next()) {
    System.out.println(rs.getInt("id") + " " + rs.getString("name") + " " + rs.getInt("birth"));
}
rs.close(); st.close(); conn.close();

模式二:健壯查詢(資源管理+異常處理)

  • 變量化SQL/連接參數
  • 分離捕獲ClassNotFoundException/SQLException
  • finally中逐個判空關閉,置null輔助GC
  • 使用getObject(index)通用獲取,或getXxx("column")強類型獲取

模式三:參數化插入(PreparedStatement 防注入+預編譯)

PreparedStatement pst = conn.prepareStatement("INSERT INTO student VALUES (?, ?, ?)");
pst.setInt(1, 4);
pst.setString(2, "Susan");
pst.setInt(3, 1993);
pst.executeUpdate();

優勢:SQL注入免疫、預編譯緩存执行计划、批量執行基礎、類型安全設置。

模式四:批處理(Batch Processing 高吞吐寫入)

Statement批處理

Statement st = conn.createStatement();
st.addBatch("INSERT INTO student VALUES (6,'Jerry',1995)");
st.addBatch("INSERT INTO student VALUES (7,'Greg',1996)");
st.addBatch("INSERT INTO student VALUES (8,'Ryan',1997)");
st.executeBatch();  -- 返回int[] 影響行數數組

PreparedStatement批處理(推薦)

PreparedStatement ps = conn.prepareStatement("INSERT INTO student VALUES (?,?,?)");
for (Student s : list) {
    ps.setInt(1, s.getId());
    ps.setString(2, s.getName());
    ps.setInt(3, s.getBirth());
    ps.addBatch();
    if (count % 1000 == 0) ps.executeBatch();  -- 分批提交防OOM
}
ps.executeBatch();

關鍵:rewriteBatchedStatements=true 連接參數開啟MySQL端重寫優化(多條INSERT合併為一條VALUES(...),(...)),性能提升10-100倍。

模式五:事務管理(ACID保證)

conn.setAutoCommit(false);  -- 關鍵:關閉自動提交
try {
    Statement st = conn.createStatement();
    st.addBatch("INSERT ...");
    st.addBatch("INSERT ...");
    st.executeBatch();
    conn.commit();          -- 顯式提交
    conn.setAutoCommit(true);
} catch (SQLException e) {
    if (conn != null) conn.rollback();  -- 異常回滾
    throw e;
} finally {
    // 關閉資源
}

核心點:自動提交關閉→業務邏輯→提交/回滾→恢復自動提交。異常分支必須回滾,否則髒數據持久化。

模式六:連接池(生產必備)

不再手動DriverManager.getConnection,使用HikariCP(Spring Boot 2.x默認)、Druid、DBCP2。配置核心參數:

  • maximumPoolSize:最大連接數
  • minimumIdle:最小空閒
  • connectionTimeout:獲取超時
  • idleTimeout:空閒回收
  • maxLifetime:連接最大壽命
  • connectionTestQuery:SELECT 1 健康檢查

JDBC是Java操作數據庫的基石協議,掌握六大模式與連接池調優,是構建高性能、穩定、安全持久層的必修內功。

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