基於 JDK 1.4/1.5、Swing、JDBC-ODBC Bridge(Access 資料庫)的桌面應用,實現學生信息增刪改查、班級/單位群組查詢。代碼單文件、單類結構,適合初學者研讀 GUI 編程、事件處理、JDBC 基礎操作。
STU:啟動類,實例化 Frm_Main。Frm_Main implements ActionListener:主視窗、菜單、工具欄、表單、文本區、JDBC 連接/關閉、所有業務邏輯(CRUD、查詢、事務模擬)。c.setLayout(null); // 容器使用空佈局
classidL.setLocation(35, 40); classidL.setSize(40, 20);
classidT.setLocation(90, 40); classidT.setSize(200, 20);
// ... 其餘組件同理
缺點:跨平台適應性差、維護困難。實戰建議使用BorderLayout+GridBagLayout或MigLayout第三方庫。
// 菜單項、工具欄按鈕均註冊 this (Frm_Main) 為監聽器
subMenu1[i].addActionListener(this);
toolBarButton[i].addActionListener(this);
// actionPerformed 內用 e.getSource() 判斷來源分發
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
con = DriverManager.getConnection("jdbc:odbc:jettang", "sa", "");
st = con.createStatement();
JDK 8 移除 JDBC-ODBC Bridge。現代應用應使用 UCanAccess (Access) 或遷移至 SQLite/H2/MySQL + 標準 JDBC 驅動。
// 查詢
String strSQL = "select * from stuinfo where name ='" + idid + "'";
// 新增
String strSQL = "insert into stuinfo(classid,name,sex,age,call,department) values('"
+ classid + "','" + name + "','" + sex + "','" + age + "','" + call + "','" + department + "')";
// 修改
String strSQL = "update stuinfo set classid='" + classid + "',sex='" + sex
+ "',age='" + age + "',call='" + call + "',department='" + department
+ "' where name='" + name + "'";
PreparedStatement。executeUpdate,無 commit/rollback,修改/刪除中途失敗會導致數據不一致。
public void displayres(ResultSet rs1) throws SQLException {
if (!rs1.next()) { JOptionPane.showMessageDialog(null, "無此記錄"); return; }
getNextRow(rs1); c.validate();
}
public void getNextRow(ResultSet rs2) throws SQLException {
int count = 1;
while (rs2.next()) {
name = " 姓名:" + rs2.getString(1);
age = " 年齡:" + rs2.getString(2) + " 單位:";
department = rs2.getString(3) + "\n";
textT.append(count + "." + name + age + department);
count++;
}
}
結果直接拼接追加到JTextArea,大數據量時界面卡頓。建議使用JTable+DefaultTableModel分頁加載。
| 維度 | 現狀 | 建議 |
|---|---|---|
| 構建工具 | 無 | Maven/Gradle,依賴管理、打包 |
| 數據庫 | Access + JDBC-ODBC | H2 (嵌入式) / SQLite / MySQL + 標準驅動 |
| 持久層 | 手寫 SQL 拼接 | MyBatis / JdbcTemplate / JPA (Hibernate) |
| GUI 架構 | 單類、絕對佈局 | MVC/MVP 分層,SwingBuilder 或 JavaFX + FXML |
| 事件處理 | 巨型 actionPerformed | Command 模式 / Lambda 表達式 (Java 8+) 分離處理器 |
| 配置外部化 | 硬編碼連接串 | properties/YAML + 環境變量注入 |
| 測試 | 無 | JUnit + Testcontainers 單元/整合測試 |
此代碼作為「Java GUI + JDBC 入門教具」極具參考價值,展示了事件驅動、組件佈局、資料庫交互最基礎形態。但生產環境絕不可直接使用,需針對安全性、可維護性、擴展性進行系統性重構。