資料庫連接管理是 Java 應用效能與穩定性的基石。本文展示基於單例模式的 DBUtils 類,封裝連接獲取、資源釋放、異常處理,適用於中小型專案快速落地。
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class DBUtils {
// 資料庫連接配置
private static final String URL = "jdbc:mysql://localhost:3306/jdbc?characterEncoding=utf-8";
private static final String USER_NAME = "root";
private static final String PASSWORD = "123123";
// 單例實例
private static final DBUtils INSTANCE = new DBUtils();
public static DBUtils getInstance() {
return INSTANCE;
}
// 私有建構子,防止外部實例化
private DBUtils() {}
/**
* 獲取資料庫連接
* @return Connection 連接物件,失敗返回 null
*/
public Connection getConn() {
Connection conn = null;
try {
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection(URL, USER_NAME, PASSWORD);
} catch (ClassNotFoundException | SQLException e) {
e.printStackTrace();
}
return conn;
}
/**
* 統一資源釋放,按逆序關閉
* @param conn 連接
* @param pstmt 預編譯語句
* @param rs 結果集
*/
public void releaseRes(Connection conn, PreparedStatement pstmt, ResultSet rs) {
try {
if (rs != null) rs.close();
if (pstmt != null) pstmt.close();
if (conn != null) conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
ResultSet → PreparedStatement → Connection,符合 JDBC 規範,防止連接洩漏printStackTrace,生產環境建議接入 SLF4J/Log4jcharacterEncoding=utf-8 解決中文亂碼DBUtils utils = DBUtils.getInstance();
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
conn = utils.getConn();
pstmt = conn.prepareStatement("SELECT * FROM users WHERE id = ?");
pstmt.setInt(1, 100);
rs = pstmt.executeQuery();
while (rs.next()) {
// 處理結果
}
} finally {
utils.releaseRes(conn, pstmt, rs); // 確保釋放
}
getConn(long timeout) 支援獲取連接超時控制此工具類適合快速原型、中小專案;高併發核心系統請直接上生產級連接池。