在 Java Web 開發中,資料庫連線是核心基礎功能。本文將詳細說明如何在 JSP 頁面與獨立 Java 類別中,分別建立 MySQL 與 SQL Server 的資料庫連線,並提供完整可執行的程式碼範例供參考。
在 JSP 中直接撰寫資料庫連線邏輯(雖然現代開發建議使用 MVC 架構分離關注點,但理解基本原理仍很重要)。以下範例展示載入驅動、建立連線、測試連線並關閉資源的完整流程。
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@page import="java.sql.Connection"%>
<%@page import="java.sql.DriverManager"%>
<%@page import="com.mysql.jdbc.Driver"%>
<%@page import="java.sql.SQLException"%>
<%@ page import="java.sql.*"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>MySQL 連線測試</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
</head>
<body>
<%
try {
// 1. 載入 MySQL JDBC 驅動
Class.forName("com.mysql.jdbc.Driver");
// 2. 定義連線參數
String url = "jdbc:mysql://localhost:3306/test"; // 資料庫 URL
String username = "your_username"; // 使用者名稱
String password = "your_password"; // 密碼
// 3. 建立連線
Connection conn = DriverManager.getConnection(url, username, password);
// 4. 驗證連線
if (conn != null && !conn.isClosed()) {
out.println("✅ MySQL 資料庫連線成功!");
} else {
out.println("❌ MySQL 資料庫連線失敗!");
}
// 5. 關閉連線
conn.close();
} catch (ClassNotFoundException e) {
out.println("❌ 找不到驅動類別:" + e.getMessage() + "<br>");
e.printStackTrace();
} catch (SQLException e) {
out.println("❌ 資料庫連線錯誤:" + e.getMessage() + "<br>");
e.printStackTrace();
}
%>
<br><br>
<form action="sqlserver.jsp" method="post">
<input type="submit" value="測試 SQL Server 連線" />
</form>
</body>
</html>
SQL Server 的連線方式類似,主要差異在於 JDBC 驅動類別名稱與連線 URL 格式。
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@page import="java.sql.*"%>
<%@page import="com.microsoft.sqlserver.jdbc.SQLServerDriver"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>SQL Server 連線測試</title>
</head>
<body>
<%
try {
// 1. 載入 SQL Server JDBC 驅動
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
// 2. 定義連線參數
// 格式:jdbc:sqlserver://主機:連接埠;DatabaseName=資料庫名稱
String url = "jdbc:sqlserver://localhost:1433;DatabaseName=your_db";
String username = "sa";
String password = "your_password";
// 3. 建立連線
Connection conn = DriverManager.getConnection(url, username, password);
// 4. 驗證連線
if (conn != null && !conn.isClosed()) {
out.println("✅ SQL Server 資料庫連線成功!");
} else {
out.println("❌ SQL Server 資料庫連線失敗!");
}
conn.close();
} catch (ClassNotFoundException e) {
out.println("❌ 找不到驅動類別:" + e.getMessage() + "<br>");
e.printStackTrace();
} catch (SQLException e) {
out.println("❌ 資料庫連線錯誤:" + e.getMessage() + "<br>");
e.printStackTrace();
}
%>
<br><br>
<form action="mysql.jsp" method="post">
<input type="submit" value="測試 MySQL 連線" />
</form>
</body>
</html>
實務開發中,建議將資料庫連線邏輯封裝在獨立的 DAO (Data Access Object) 類別中,避免在 JSP 中混雜商業邏輯。以下範例示範一個支援 MySQL 與 SQL Server 切換的連線工具類。
package com.example.dao;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class DBConnectionManager {
// 可透過設定檔或建構子注入以下參數
private String driverName = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
private String url = "jdbc:sqlserver://localhost:1433;DatabaseName=master";
private String user = "sa";
private String password = "root";
// Getter/Setter 省略...
/**
* 取得資料庫連線
* @return Connection 物件,若連線失敗回傳 null
*/
public Connection getConnection() {
try {
// 載入驅動
Class.forName(driverName);
// 建立連線
return DriverManager.getConnection(url, user, password);
} catch (ClassNotFoundException e) {
System.err.println("❌ 找不到 JDBC 驅動:" + driverName);
e.printStackTrace();
} catch (SQLException e) {
System.err.println("❌ 資料庫連線失敗:" + e.getMessage());
e.printStackTrace();
}
return null;
}
// 測試主程式
public static void main(String[] args) {
DBConnectionManager manager = new DBConnectionManager();
Connection conn = manager.getConnection();
if (conn != null) {
System.out.println("✅ 資料庫連線正常!");
try { conn.close(); } catch (SQLException e) { e.printStackTrace(); }
} else {
System.out.println("❌ 資料庫連線失敗!");
}
}
}
mysql-connector-java.jar、mssql-jdbc.jar)加入專案類別路徑。jdbc:mysql://host:port/dbname;SQL Server 使用 jdbc:sqlserver://host:port;DatabaseName=dbname。finally 區塊或使用 try-with-resources (Java 7+) 確保 Connection、Statement、ResultSet 正確關閉,避免連線洩漏。頻繁建立/關閉實體連線開銷極大。生產環境強烈建議整合連線池框架(如 HikariCP),配合 Spring 或獨立使用,可大幅提升吞吐量與穩定性。配置範例:
// HikariCP 配置範例 (application.properties) spring.datasource.hikari.driver-class-name=com.mysql.cj.jdbc.Driver spring.datasource.hikari.jdbc-url=jdbc:mysql://localhost:3306/mydb?useSSL=false&serverTimezone=UTC spring.datasource.hikari.username=root spring.datasource.hikari.password=secret spring.datasource.hikari.maximum-pool-size=20 spring.datasource.hikari.minimum-idle=5
掌握 JDBC 連線基礎是 Java 後端開發的入門必修課。雖然現代框架(Spring Data JPA、MyBatis 等)已將底層細節封裝,但理解驅動載入、連線建立、異常處理與資源釋放的核心流程,對於除錯、效能調優與架構設計仍具關鍵價值。