管理資料庫連線

在 Java 中查詢 PostgreSQL 資料庫

Miller Trujillo

Staff Software Engineer

為何連線管理很重要?

$$

  • 每個連線都會開啟網路 socket
  • 需要驗證與資源配置
  • 未關閉的連線會造成資源洩漏
  • 新連線可能失敗

一張圖示多個資料庫連線堆積,其中一些標記為「殭屍」連線:已開啟但未使用

在 Java 中查詢 PostgreSQL 資料庫

try-with-resources

String sql = "SELECT COUNT(*) FROM books";


try (Connection conn = DriverManager.getConnection(url, user, password); Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery(sql)) {
if (rs.next()) { System.out.println("Total books: " + rs.getInt(1)); } }
  • 連線會自動關閉
在 Java 中查詢 PostgreSQL 資料庫

連線池(Connection pooling)

  • 新連線會重複高成本的初始化
  • 集中池可重用既有連線
  • 完成後將連線歸還連線池

計程車排班的類比

一張圖示連線池:多個預先建立的連線,箭頭顯示連線被借用與歸還

在 Java 中查詢 PostgreSQL 資料庫

HikariCP 範例

import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;


HikariConfig config = new HikariConfig(); config.setJdbcUrl("jdbc:postgresql://localhost:5432/library"); config.setUsername("postgres"); config.setPassword("secret");
HikariDataSource ds = new HikariDataSource(config);
try (Connection conn = ds.getConnection()) { System.out.println("Connected with HikariCP!"); }
在 Java 中查詢 PostgreSQL 資料庫

HikariCP 主控台日誌

[main] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Starting...
[main] INFO com.zaxxer.hikari.pool.HikariPool - HikariPool-1 - 
    Added connection org.postgresql.jdbc.PgConnection@ID
[main] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Start completed.
在 Java 中查詢 PostgreSQL 資料庫

一起來練習吧!

在 Java 中查詢 PostgreSQL 資料庫

Preparing Video For Download...