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

Java + MySQL 學生管理系統實戰:Swing GUI、JDBC CRUD 與分層架構示範

     編輯:Java 綜合教學

Java + MySQL 學生管理系統實戰:Swing GUI、JDBC CRUD 與分層架構示範

本專案示範使用 Java Swing 建立桌面應用程式,搭配 MySQL 資料庫與 JDBC 實作學生資料的增刪改查(CRUD)。程式碼採用簡易分層:Test3(主視窗/控制器)、StuModel(資料模型/DAO)、StuAddDiag/StuUpDiag(對話框/View)。

一、資料庫準備

CREATE DATABASE spdb1 CHARACTER SET utf8mb4;
USE spdb1;
CREATE TABLE stu (
    stuId VARCHAR(20) PRIMARY KEY,
    stuName VARCHAR(50),
    stuSex VARCHAR(10),
    stuAge INT,
    stuJG VARCHAR(50),   -- 籍貫
    stuDept VARCHAR(50)  -- 門派/系所
);

二、核心類別架構

類別職責關鍵技術點
Test3主視窗、事件分派、元件組裝JFrame、JTable、JScrollPane、ActionListener、JOptionPane
StuModel繼承 AbstractTableModel,封裝 JDBC 查詢/刪除,提供表格資料Vector 雙層儲存行/列、DriverManager、PreparedStatement、try-with-resources 風格關閉資源
StuAddDiag新增學生對話框(Modal JDialog)GridLayout、PreparedStatement 參數化插入、dispose() 關閉
StuUpDiag修改學生對話框,預填選中行資料建構子接收 StuModel 與 rowNum、參數化 UPDATE(原碼誤用 INSERT,見下)

三、關鍵程式碼片段與修正說明

1. StuModel 初始化與查詢

public void init(String sql) {
    if (sql == null || sql.isEmpty()) sql = "SELECT * FROM stu";
    // 設定欄名
    columnNames = new Vector<>(Arrays.asList("學號","名字","性別","年齡","籍貫","門派"));
    rowData = new Vector<>();
    try (Connection ct = DriverManager.getConnection(URL, USER, PWD);
         Statement stat = ct.createStatement();
         ResultSet rs = stat.executeQuery(sql)) {
        while (rs.next()) {
            Vector row = new Vector<>();
            row.add(rs.getString(1)); row.add(rs.getString(2)); row.add(rs.getString(3));
            row.add(rs.getInt(4)); row.add(rs.getString(5)); row.add(rs.getString(6));
            rowData.add(row);
        }
    } catch (SQLException e) { e.printStackTrace(); }
}

改進點:使用 try-with-resources 自動關閉資源、參數化 URL/帳密為常數、空 SQL 防護。

2. 刪除邏輯(Test3.actionPerformed → jb4)

String stuId = (String) sm.getValueAt(rowNum, 0);
try (Connection ct = DriverManager.getConnection(URL, USER, PWD);
     PreparedStatement ps = ct.prepareStatement("DELETE FROM stu WHERE stuId = ?")) {
    ps.setString(1, stuId);
    ps.executeUpdate();
    JOptionPane.showMessageDialog(this, "刪除成功");
} catch (SQLException e) { e.printStackTrace(); }
sm = new StuModel(); jt.setModel(sm); // 刷新表格

3. 新增對話框(StuAddDiag)參數化 INSERT

String sql = "INSERT INTO stu VALUES (?,?,?,?,?,?)";
try (Connection ct = DriverManager.getConnection(URL, USER, PWD);
     PreparedStatement ps = ct.prepareStatement(sql)) {
    ps.setString(1, jf1.getText()); // stuId
    ps.setString(2, jf2.getText()); // stuName
    ps.setString(3, jf3.getText()); // stuSex
    ps.setString(4, jf4.getText()); // stuAge
    ps.setString(5, jf5.getText()); // stuJG
    ps.setString(6, jf6.getText()); // stuDept
    ps.executeUpdate();
    dispose();
}

4. ⚠ 修改對話框(StuUpDiag)關鍵修正:應用 UPDATE 而非 INSERT

原碼錯誤:String strsql = "insert into stu values(?,?,?,?,?,?)"; 會導致主鍵衝突或重複資料。

// 正確 UPDATE 寫法
String sql = "UPDATE stu SET stuName=?, stuSex=?, stuAge=?, stuJG=?, stuDept=? WHERE stuId=?";
try (Connection ct = DriverManager.getConnection(URL, USER, PWD);
     PreparedStatement ps = ct.prepareStatement(sql)) {
    ps.setString(1, jf2.getText());
    ps.setString(2, jf3.getText());
    ps.setString(3, jf4.getText());
    ps.setString(4, jf5.getText());
    ps.setString(5, jf6.getText());
    ps.setString(6, jf1.getText()); // WHERE 條件
    ps.executeUpdate();
    dispose();
}

四、介面截圖說明

  • 主介面:頂部查詢列、中間 JTable 顯示資料、底部「新增/修改/刪除」按鈕。
  • 查詢:輸入姓名點擊「查詢」 → 重建 StuModel(sql) → 更新 JTable。
  • 新增:彈出 Modal 對話框,填寫六欄位 → INSERT → 關閉對話框 → 主視窗自動刷新。
  • 修改:選中一列 → 彈出預填資料對話框 → 修改 → UPDATE → 刷新。
  • 刪除:選中一列 → 確認對話框 → DELETE → 刷新。

五、架構優化建議(進階重構方向)

  1. DAO 模式:將 JDBC 邏輯抽離至 StudentDAO 介面 + 實作,Model 僅負責表格資料結構。
  2. 連線池:引入 HikariCP/Druid 替代 DriverManager,提升併發效能。
  3. 輸入驗證:新增/修改前驗證學號唯一、年齡數值、必填欄位。
  4. 異常處理:統一拋出自訂異常,UI 層友善提示而非 printStackTrace()。
  5. 分頁/排序:大量資料時實作分頁查詢(LIMIT offset, size)與表頭點擊排序。
  6. MVC 更清晰:Controller 處理事件、Service 處理業務、DAO 處理持久化、View 僅渲染。

六、執行環境需求

  • JDK 8+
  • MySQL 5.7+ / 8.0
  • MySQL Connector/J 驅動(mysql-connector-java-8.x.jar)加入 Classpath
  • IDE:Eclipse / IntelliJ IDEA / VS Code
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved