首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

最簡單的 JSP + Servlet 增刪改查 (CRUD) 完整範例

     編輯:Java 綜合教學

專案架構概覽

本範例展示一個基於 JSP、Servlet、JDBC 的簡易管理員資料增刪改查系統,採用 DAO 模式分離資料存取邏輯,包含以下模組:

  • Model:Admin 實體類
  • DAO:AdminDao 資料存取類、DbHelper 資料庫連線工具
  • Servlet 控制器:AddServlet、DeleteServlet、ShowServlet、UpdateServlet
  • View (JSP):add.jsp、index.jsp、update.jsp
  • CSS:簡易樣式表

核心程式碼

1. 實體類

package ceet.ac.cn.model;
import java.io.Serializable;

public class Admin implements Serializable {
    private static final long serialVersionUID = 1L;
    private int id;
    private String username;
    private String userpwd;
    // Getter/Setter 略
}

2. 資料庫連線工具

package ceet.ac.cn.dao;
import java.sql.*;

public class DbHelper {
    private static String url = "jdbc:mysql://localhost:3306/admin";
    private static String userName = "root";
    private static String passWord = "359129127";
    private static Connection conn = null;

    private DbHelper() {}

    public static Connection getConnection() {
        if (conn == null) {
            try {
                Class.forName("com.mysql.jdbc.Driver");
                conn = DriverManager.getConnection(url, userName, passWord);
            } catch (Exception e) { e.printStackTrace(); }
        }
        return conn;
    }
}

3. DAO 類 - 完整 CRUD 操作

package ceet.ac.cn.dao;
import java.sql.*;
import java.util.*;
import ceet.ac.cn.model.Admin;

public class AdminDao {
    // 查詢所有
    public List getAllAdmin() {
        List list = new ArrayList<>();
        Connection conn = DbHelper.getConnection();
        String sql = "SELECT * FROM admin";
        try (PreparedStatement pst = conn.prepareStatement(sql);
             ResultSet rst = pst.executeQuery()) {
            while (rst.next()) {
                Admin admin = new Admin();
                admin.setId(rst.getInt("id"));
                admin.setUsername(rst.getString("username"));
                admin.setUserpwd(rst.getString("userpwd"));
                list.add(admin);
            }
        } catch (SQLException e) { e.printStackTrace(); }
        return list;
    }

    // 新增
    public boolean addAdmin(Admin admin) {
        String sql = "INSERT INTO admin(id, username, userpwd) VALUES (?,?,?)";
        try (Connection conn = DbHelper.getConnection();
             PreparedStatement pst = conn.prepareStatement(sql)) {
            pst.setInt(1, admin.getId());
            pst.setString(2, admin.getUsername());
            pst.setString(3, admin.getUserpwd());
            return pst.executeUpdate() > 0;
        } catch (SQLException e) { e.printStackTrace(); }
        return false;
    }

    // 修改
    public boolean updateAdmin(Admin admin) {
        String sql = "UPDATE admin SET username=?, userpwd=? WHERE id=?";
        try (Connection conn = DbHelper.getConnection();
             PreparedStatement pst = conn.prepareStatement(sql)) {
            pst.setString(1, admin.getUsername());
            pst.setString(2, admin.getUserpwd());
            pst.setInt(3, admin.getId());
            return pst.executeUpdate() > 0;
        } catch (SQLException e) { e.printStackTrace(); }
        return false;
    }

    // 刪除
    public boolean deleteAdmin(int id) {
        String sql = "DELETE FROM admin WHERE id=?";
        try (Connection conn = DbHelper.getConnection();
             PreparedStatement pst = conn.prepareStatement(sql)) {
            pst.setInt(1, id);
            return pst.executeUpdate() > 0;
        } catch (SQLException e) { e.printStackTrace(); }
        return false;
    }

    // 依 ID 查詢
    public Admin selectAdminById(int id) {
        String sql = "SELECT * FROM admin WHERE id=" + id;
        try (Connection conn = DbHelper.getConnection();
             PreparedStatement pst = conn.prepareStatement(sql);
             ResultSet rst = pst.executeQuery()) {
            if (rst.next()) {
                Admin admin = new Admin();
                admin.setId(rst.getInt("id"));
                admin.setUsername(rst.getString("username"));
                admin.setUserpwd(rst.getString("userpwd"));
                return admin;
            }
        } catch (SQLException e) { e.printStackTrace(); }
        return null;
    }
}

4. Servlet 控制器

新增:AddServlet 接收表單資料,轉碼處理中文,調用 DAO 新增後轉發至 ShowServlet。

刪除:DeleteServlet 取得 ID 參數,調用 DAO 刪除後轉發至 ShowServlet。

查詢列表:ShowServlet 調用 DAO 取得所有資料,存入 request 屬性,轉發至 index.jsp 顯示。

修改:UpdateServlet 的 doGet 依 ID 查詢資料並轉發至 update.jsp;doPost 接收修改後資料調用 DAO 更新後轉發至 ShowServlet。

5. JSP 視圖

index.jsp (列表頁):使用 JSTL <c:forEach> 迭代顯示資料,每行提供「刪除」與「修改」連結,帶上 ID 參數。

add.jsp / update.jsp (表單頁):簡易 HTML 表單,提交至對應 Servlet。

6. CSS 樣式

@CHARSET "UTF-8";
table.t1 { margin: 10px 20px 5px; border-collapse: collapse; font: 14px "宋體"; text-align: center; }
table.t1 th { background: #7CB8E2; color: #fff; padding: 6px 4px; }
table.t1 td { background: #C7DDEE; color: #000; padding: 4px 2px; }
table.t1 a { text-decoration: none; color: #3366CC; }
table.t1 a:hover { color: #B50000; text-decoration: underline; }

實現原理說明

  • 列表頁每行資料後附「編輯/刪除」按鈕,攜帶主鍵 ID 提交至後端。
  • 點擊編輯:Servlet 查詢該 ID 資料,轉發至 JSP 將表格單元格替換為輸入框並回填值,提交後更新資料庫並恢復顯示模式。
  • 新增:同編輯邏輯,呈現空白輸入框供填寫。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved