首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

JSP 連接 SQL Server 2005 完整實戰:JDBC 驅動、JavaBean 封裝與 JSP 調用

     編輯:關於SqlServer

在 JSP/Web 應用中連接 SQL Server 2005,需經歷JDBC 驅動獲取、JavaBean 封裝數據庫操作、JSP 頁面調用 三個核心步驟。本文提供從驅動下載到完整代碼結構的落地指南,採用JavaBean + JSP 經典模式 (Model 1),適合中小型項目快速原型與教學演示。

第一步:獲取並部署 JDBC 驅動

  1. 下載 Microsoft SQL Server JDBC Driver 1.0 (舊版對應 SQL 2005):
    https://www.microsoft.com/downloads/details.aspx?FamilyID=6d483869-816a-44cb-9787-a866235efc7c&DisplayLang=zh-cn
    文件名:sqljdbc_1.0.809.102_chs.exe (自解壓安裝包)。
  2. 運行安裝包,解壓獲得核心 JAR:sqljdbc.jar。
  3. 部署到 Web 應用:
    • Eclipse/Web 專案:複製 sqljdbc.jar 至 WebRoot/WEB-INF/lib/。
    • Tomcat 全局共享:放入 $CATALINA_HOME/lib/ (需重啟 Tomcat)。

第二步:編寫 JavaBean 封裝數據庫操作 (Conndb2005.java)

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();
        }
    }
}

第三步:JSP 頁面調用 JavaBean (conn2005.jsp)

<%@ 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("");
            while (rs.next()) {
                out.println("");
            }
            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

進階優化與生產級建議

IDNameEmail
" + rs.getInt("Id") + "" + rs.getString("Name") + "" + rs.getString("Email") + "
  • 連接泄漏
  • SQL 注入
  • 配置硬編碼
  • 異常處理
  • 驅動版本
  • 架構分層
  • 問題解決方案
    使用連接池 (DBCP/HikariCP/C3P0),配置在 context.xml 或 server.xml,JavaBean 通過 JNDI 獲取 DataSource。
    代碼已使用 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 是防注入鐵律,連接池是性能基石,分層是可維護性保障。

    1. 上一篇文章:
    2. 下一篇文章:
    Copyright © 程式碼之家 All Rights Reserved