Class.forName("com.mysql.cj.jdbc.Driver") (8.0+包名變更)DriverManager.getConnection(url, user, pwd)conn.createStatement() 或 conn.prepareStatement(sql)executeQuery()/executeUpdate()/execute()ResultSet.next() 循環 getXxx()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/構建工具管理依賴)。
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();
ClassNotFoundException/SQLExceptionfinally中逐個判空關閉,置null輔助GCgetObject(index)通用獲取,或getXxx("column")強類型獲取PreparedStatement pst = conn.prepareStatement("INSERT INTO student VALUES (?, ?, ?)");
pst.setInt(1, 4);
pst.setString(2, "Susan");
pst.setInt(3, 1993);
pst.executeUpdate();
優勢:SQL注入免疫、預編譯緩存执行计划、批量執行基礎、類型安全設置。
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 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倍。
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操作數據庫的基石協議,掌握六大模式與連接池調優,是構建高性能、穩定、安全持久層的必修內功。