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

Java 8 入門實戰:基於 JDBC 的人力資源管理系統完整教程

     編輯:Java 綜合教學

專案概覽

  • 技術棧:Java 8、JDBC (MySQL Connector/J 5.1+)、MySQL 5.7、SQLyog 客戶端、IntelliJ IDEA / Eclipse。
  • 功能模塊:用戶註冊/登錄/修改密碼、員工信息 CRUD(增刪改查)、異常處理、分層架構(DAO/Service/UI)。
  • 數據庫設計:t_staff(員工表)、t_user(用戶表)。

數據庫初始化腳本

CREATE DATABASE HRMS_db DEFAULT CHARSET utf8;

CREATE TABLE t_staff(
  id INT PRIMARY KEY NOT NULL AUTO_INCREMENT,
  NAME VARCHAR(5) NOT NULL,
  sex VARCHAR(1) NOT NULL,
  age INT NOT NULL
);

CREATE TABLE t_user(
  id INT PRIMARY KEY NOT NULL AUTO_INCREMENT,
  NAME VARCHAR(10) NOT NULL,
  pswd VARCHAR(10) NOT NULL
);

核心代碼結構

1. 數據庫工具類 DBUtil(單例連接 + PreparedStatement 封裝)

public class DBUtil {
    private static final String DRIVER = "com.mysql.jdbc.Driver";
    private static final String URL = "jdbc:mysql://localhost:3306/hrms_db?characterEncoding=utf-8";
    private static final String USER = "root";
    private static final String PASSWORD = "";
    private static Connection con = null;

    public static Connection getConnection() throws Exception {
        Class.forName(DRIVER);
        con = DriverManager.getConnection(URL, USER, PASSWORD);
        return con;
    }

    public static void closeConnection() throws Exception {
        if (con != null && !con.isClosed()) { con.close(); con = null; }
    }

    // 通用增刪改(支持參數綁定)
    public static int executeUpdate(String sql, Object... params) throws Exception {
        con = getConnection();
        PreparedStatement ps = con.prepareStatement(sql);
        if (params != null) for (int i = 0; i < params.length; i++) ps.setObject(i + 1, params[i]);
        int r = ps.executeUpdate();
        closeConnection();
        return r;
    }

    // 查詢(注意:ResultSet 依賴 Connection,調用方需手動關閉)
    public static ResultSet executeQuery(String sql, Object... params) throws Exception {
        con = getConnection();
        PreparedStatement ps = con.prepareStatement(sql);
        if (params != null) for (int i = 0; i < params.length; i++) ps.setObject(i + 1, params[i]);
        return ps.executeQuery();
    }

    // 登錄驗證
    public static boolean queryLogin(String name, String pswd) throws Exception {
        ResultSet rs = executeQuery("SELECT name FROM t_user WHERE name=? AND pswd=?", name, pswd);
        boolean ok = rs.next();
        closeConnection(); // 查詢後立即關閉
        return ok;
    }
}

2. 業務邏輯類 HrmsByJdbc(控制台菜單交互)

  • mainInterface():主循環菜單,分發查詢/新增/修改/刪除操作。
  • query():支持全表查詢與按 ID 單條查詢,格式化輸出。
  • add():輸入姓名/性別/年齡,參數化插入防注入。
  • update():先查後改,確認後按字段單獨更新。
  • del():先查確認,再執行刪除。
  • 統一 try-catch-finally 保證連接關閉,異常堆棧打印便於排查。

3. 用戶認證類 Login

  • register():檢查用戶名唯一性,寫入 t_user。
  • login():最多 3 次重試,成功進入 HrmsByJdbc.mainInterface()。
  • updatePswd():預留擴展(可補充舊密碼驗證 + 更新邏輯)。

4. 程序入口 TextLogin

public class TextLogin {
    public static void main(String[] args) throws Exception {
        Scanner sc = new Scanner(System.in);
        while (true) {
            // 打印菜單:1註冊 2登錄 3改密 0退出
            int num = sc.nextInt();
            switch (num) {
                case 1: Login.register(); break;
                case 2: Login.login(); break;
                case 3: Login.updatePswd(); break;
                case 0: System.out.println("Thanks For Your Use!"); return;
                default: System.out.println("無效選項");
            }
        }
    }
}

關鍵技術點總結

  1. 參數化查詢:全程使用 PreparedStatement + setObject,徹底防範 SQL 注入。
  2. 資源管理:查詢方法返回 ResultSet 時不關閉 Connection,由調用方 finally 塊統一釋放;增刪改內部自管連接生命周期。
  3. 事務缺失提示:教學版未引入事務控制(Connection.setAutoCommit(false)),生產環境必須添加。
  4. 分層思想萌芽:DAO(DBUtil) / Service(HrmsByJdbc) / UI(TextLogin) 雛形清晰。

學習心得與建議

「從幾行 Hello World 到百行系統,一個月的碼量積累換來的是肌肉記憶與工程直覺。代碼寫十遍還記不住,就再寫十遍。堅持,比聰明更重要。」—— 作者 A_zhi 2016.9.11

  • 建議後續遷移至 MyBatis / JPA 簡化 DAO 層,引入 連接池 (Druid/HikariCP) 提升並發性能。
  • 補全輸入校驗(正則、Bean Validation)、日誌框架 (SLF4J+Logback)、單元測試 (JUnit+Mockito)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved