Java 應用程序通過 JDBC (Java Database Connectivity) API 與關係型數據庫進行交互。本文將系統講解如何使用 Java 代碼連接數據庫,並封裝一個通用的數據庫工具類,實現增、刪、改、查等核心操作。
Class.forName() 加載數據庫驅動類(如 MySQL 的 com.mysql.cj.jdbc.Driver,SQL Server 的 com.microsoft.sqlserver.jdbc.SQLServerDriver)。DriverManager.getConnection(url, user, password) 獲取 Connection 對象。Statement、PreparedStatement 或 CallableStatement 執行 SQL。executeQuery 用於查詢返回 ResultSet;executeUpdate 用於增刪改返回影響行數。finally 塊中關閉 ResultSet、Statement、Connection,防止內存洩漏。以下代碼演示了一個基於單例模式的簡易工具類,支持 SQL Server 2005+,並封裝了查詢與更新操作:
import java.sql.*;
public class DBTool {
// 數據庫配置常量 (實際項目中建議放入配置文件)
private static final String DRIVER = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
private static final String URL = "jdbc:sqlserver://localhost:1433;DatabaseName=YourDB;";
private static final String USER = "sa";
private static final String PWD = "your_password";
private static Connection conn = null;
// 私有構造器,實現單例連接
private DBTool() {
try {
if (conn == null || conn.isClosed()) {
Class.forName(DRIVER).newInstance();
conn = DriverManager.getConnection(URL, USER, PWD);
System.out.println("數據庫連接成功!");
}
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException("數據庫連接失敗", e);
}
}
// 獲取連接實例
private static Connection getConn() {
if (conn == null) new DBTool();
return conn;
}
/**
* 執行查詢操作
* @param sql 查詢語句
* @return ResultSet 結果集 (需調用者關閉)
*/
public static ResultSet executeQuery(String sql) {
try {
return getConn().createStatement(
ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_UPDATABLE).executeQuery(sql);
} catch (SQLException e) {
e.printStackTrace();
return null;
}
}
/**
* 執行增、刪、改操作
* @param sql 執行語句
* @return 影響行數,-1 表示失敗
*/
public static int executeUpdate(String sql) {
try {
return getConn().createStatement().executeUpdate(sql);
} catch (SQLException e) {
System.err.println("SQL 執行錯誤: " + e.getMessage());
return -1;
}
}
// 測試主方法
public static void main(String[] args) {
// 查詢示例
ResultSet rs = executeQuery("SELECT * FROM Users");
try {
while (rs != null && rs.next()) {
System.out.println(rs.getString("username"));
}
} catch (SQLException e) {
e.printStackTrace();
}
// 更新示例
int rows = executeUpdate("INSERT INTO Users(username, pwd) VALUES('test', '123')");
System.out.println("插入行數: " + rows);
}
}
不同數據庫的驅動類名和 JDBC URL 格式不同,必須確保與數據庫版本匹配:
com.mysql.cj.jdbc.Driver | jdbc:mysql://host:3306/db?useSSL=false&serverTimezone=UTCcom.microsoft.sqlserver.jdbc.SQLServerDriver | jdbc:sqlserver://host:1433;DatabaseName=dboracle.jdbc.driver.OracleDriver | jdbc:oracle:thin:@host:1521:sid實際開發中強烈建議使用 PreparedStatement 替代 Statement,利用佔位符 ? 預編譯 SQL,有效防止 SQL 注入攻擊並提升性能。
JDK 7+ 引入的 try-with-resources 語法可自動關閉實現 AutoCloseable 接口的資源,代碼更簡潔安全:
try (Connection c = DriverManager.getConnection(URL, USER, PWD);
PreparedStatement ps = c.prepareStatement(sql);
ResultSet rs = ps.executeQuery()) {
// 處理結果集
} catch (SQLException e) {
e.printStackTrace();
}
characterEncoding=utf8)。掌握 JDBC 核心流程並封裝通用工具類是 Java 後端開發的基礎技能。實際項目中,建議使用成熟的連接池(如 HikariCP、Druid)管理連接,並結合 MyBatis、JPA 等 ORM 框架提升開發效率。