在 JSP/Web 應用中連接 SQL Server 2005,需經歷JDBC 驅動獲取、JavaBean 封裝數據庫操作、JSP 頁面調用 三個核心步驟。本文提供從驅動下載到完整代碼結構的落地指南,採用JavaBean + JSP 經典模式 (Model 1),適合中小型項目快速原型與教學演示。
https://www.microsoft.com/downloads/details.aspx?FamilyID=6d483869-816a-44cb-9787-a866235efc7c&DisplayLang=zh-cn
文件名:sqljdbc_1.0.809.102_chs.exe (自解壓安裝包)。
sqljdbc.jar。sqljdbc.jar 至 WebRoot/WEB-INF/lib/。$CATALINA_HOME/lib/ (需重啟 Tomcat)。package com.example.db;
import java.sql.*;
public class Conndb2005 {
// 數據庫連接配置 (建議外部化至 properties 文件)
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";
static {
try { Class.forName(DRIVER); }
catch (ClassNotFoundException e) { throw new RuntimeException("JDBC Driver not found", e); }
}
// 獲取連接
public Connection getConnection() throws SQLException {
return DriverManager.getConnection(URL, USER, PWD);
}
// 通用查詢 (返回 ResultSet,調用者負責關閉)
public ResultSet executeQuery(String sql, Object... params) throws SQLException {
Connection conn = getConnection();
PreparedStatement ps = conn.prepareStatement(sql);
for (int i = 0; i < params.length; i++) ps.setObject(i + 1, params[i]);
return ps.executeQuery(); // 注意:連接/Statement 需在 ResultSet 關閉後由調用者關閉
}
// 通用更新 (INSERT/UPDATE/DELETE)
public int executeUpdate(String sql, Object... params) throws SQLException {
Connection conn = getConnection();
try (PreparedStatement ps = conn.prepareStatement(sql)) {
for (int i = 0; i < params.length; i++) ps.setObject(i + 1, params[i]);
return ps.executeUpdate();
} finally {
conn.close();
}
}
// 事務範例
public void transferMoney(String fromAcc, String toAcc, double amount) throws SQLException {
Connection conn = getConnection();
try {
conn.setAutoCommit(false);
executeUpdateInTx(conn, "UPDATE Account SET Balance = Balance - ? WHERE AccNo = ?", amount, fromAcc);
executeUpdateInTx(conn, "UPDATE Account SET Balance = Balance + ? WHERE AccNo = ?", amount, toAcc);
conn.commit();
} catch (SQLException e) {
conn.rollback();
throw e;
} finally {
conn.setAutoCommit(true);
conn.close();
}
}
private int executeUpdateInTx(Connection conn, String sql, Object... params) throws SQLException {
try (PreparedStatement ps = conn.prepareStatement(sql)) {
for (int i = 0; i < params.length; i++) ps.setObject(i + 1, params[i]);
return ps.executeUpdate();
}
}
}
<%@ page import="com.example.db.Conndb2005, java.sql.*" %>
<%@ page contentType="text/html;charset=UTF-8" %>
<%
Conndb2005 db = new Conndb2005();
String action = request.getParameter("action"); // list, add, delete...
String msg = "";
try {
if ("list".equals(action)) {
ResultSet rs = db.executeQuery("SELECT * FROM Users ORDER BY Id");
out.println("ID Name Email ");
while (rs.next()) {
out.println("" + rs.getInt("Id") + " " + rs.getString("Name") + " " + rs.getString("Email") + " ");
}
rs.getStatement().getConnection().close(); // 關閉連接鏈
rs.close();
} else if ("add".equals(action)) {
String name = request.getParameter("name");
String email = request.getParameter("email");
int rows = db.executeUpdate("INSERT INTO Users (Name, Email) VALUES (?, ?)", name, email);
msg = rows > 0 ? "添加成功" : "添加失敗";
} else if ("delete".equals(action)) {
int id = Integer.parseInt(request.getParameter("id"));
int rows = db.executeUpdate("DELETE FROM Users WHERE Id = ?", id);
msg = rows > 0 ? "刪除成功" : "刪除失敗";
}
} catch (Exception e) {
msg = "錯誤: " + e.getMessage();
e.printStackTrace();
}
%>
SQL Server 2005 JSP Demo
用戶管理 Demo
<%= msg %>
查看列表
訪問驗證
啟動 Tomcat,瀏覽器訪問:
https://localhost:8080/YourWebApp/conn2005.jsp?action=list
進階優化與生產級建議
問題 解決方案
連接泄漏使用連接池 (DBCP/HikariCP/C3P0),配置在 context.xml 或 server.xml,JavaBean 通過 JNDI 獲取 DataSource。
SQL 注入代碼已使用 PreparedStatement 參數化,嚴禁字串拼接 SQL。
配置硬編碼URL/用戶/密碼移至 db.properties,ServletContextListener 初始化讀取。
異常處理自定義異常體系,統一錯誤頁面,記錄日誌 (Log4j/SLF4J)。
驅動版本新項目請用 mssql-jdbc (Microsoft 官方現代驅動),Maven 坐標:com.microsoft.sqlserver:mssql-jdbc:12.2.0.jre11,支援 SQL 2005+ 所有版本。
架構分層採用 Servlet (Controller) + Service + DAO + JSP (View) (Model 2 / MVC),避免 JSP 混寫業務邏輯。
總結
JSP 連接 SQL Server 2005 核心路徑:下載 sqljdbc.jar → WEB-INF/lib → JavaBean 封裝 CRUD/事務 → JSP 調用 JavaBean → 瀏覽器驗證。教學/原型階段可用 Model 1 (JavaBean+JSP) 快速跑通;生產環境必須升級為連接池、外部化配置、MVC 分層、現代 JDBC 驅動。記住:PreparedStatement 是防注入鐵律,連接池是性能基石,分層是可維護性保障。
- 上一篇文章: 尋覓 SQL Server Management Studio (SqlWb.exe) 的辛酸歷程與解決之道
- 下一篇文章: ETL 學習筆記之三:MS SQL DTS 深度解析與實戰評價
Copyright © 程式碼之家 All Rights Reserved