You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java NetBeans请假管理系统:如何批量插入指定日期区间的每日请假记录

按日批量插入员工请假记录的实现方案

核心思路

遍历请假起始日期到结束日期的每一天,为每个日期生成一条独立的请假记录,通过JDBC批量插入数据库,同时利用事务保证数据一致性。

具体实现代码

以下是基于Java JDBC的完整实现示例(适配NetBeans开发环境):

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.time.LocalDate;

public class LeaveRecordInsert {
    // 替换为你的数据库连接信息
    private static final String DB_URL = "jdbc:mysql://localhost:3306/leave_management";
    private static final String DB_USER = "root";
    private static final String DB_PASSWORD = "your_db_password";

    public void batchInsertDailyLeaves() {
        // 员工信息
        String empId = "108";
        String empName = "Wasif";
        // 请假日期范围
        LocalDate startLeaveDate = LocalDate.of(2023, 4, 19);
        LocalDate endLeaveDate = LocalDate.of(2023, 4, 30);

        Connection conn = null;
        PreparedStatement pstmt = null;

        try {
            // 加载数据库驱动(MySQL 8.0+ 可省略)
            Class.forName("com.mysql.cj.jdbc.Driver");
            // 获取连接并开启事务
            conn = DriverManager.getConnection(DB_URL, DB_USER, DB_PASSWORD);
            conn.setAutoCommit(false);

            // 预编译插入SQL,字段名请匹配你的表结构
            String insertSql = "INSERT INTO employee_leaves (emp_id, emp_name, leave_date) VALUES (?, ?, ?)";
            pstmt = conn.prepareStatement(insertSql);

            LocalDate currentDate = startLeaveDate;
            // 遍历日期范围,逐个添加批量任务
            while (!currentDate.isAfter(endLeaveDate)) {
                pstmt.setString(1, empId);
                pstmt.setString(2, empName);
                pstmt.setDate(3, java.sql.Date.valueOf(currentDate));
                
                pstmt.addBatch();
                currentDate = currentDate.plusDays(1);
            }

            // 执行批量插入并提交事务
            int[] result = pstmt.executeBatch();
            conn.commit();
            System.out.println("成功插入 " + result.length + " 条请假记录");

        } catch (ClassNotFoundException | SQLException e) {
            // 异常时回滚事务
            if (conn != null) {
                try {
                    conn.rollback();
                    System.out.println("插入失败,已回滚所有操作");
                } catch (SQLException ex) {
                    ex.printStackTrace();
                }
            }
            e.printStackTrace();
        } finally {
            // 关闭数据库资源
            try {
                if (pstmt != null) pstmt.close();
                if (conn != null) conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }

    public static void main(String[] args) {
        new LeaveRecordInsert().batchInsertDailyLeaves();
    }
}

关键注意事项

  • 数据库适配:根据你使用的数据库(如Oracle、SQL Server)调整驱动类、连接URL和日期处理方式。例如Oracle驱动类为oracle.jdbc.OracleDriver,连接URL格式为jdbc:oracle:thin:@//localhost:1521/ORCL。
  • 表结构匹配:确保INSERT语句中的表名和字段名与你的数据库表完全一致,比如如果你的请假表字段是employee_id而非emp_id,需要对应修改。
  • 约束检查:确认员工工号108已存在于员工表(若有外键约束),同时检查leave_date是否允许同一员工重复记录(如需限制,可添加UNIQUE(emp_id, leave_date)约束)。
  • 事务保障:代码中关闭了自动提交,只有所有记录插入成功才会提交事务,避免出现部分记录插入的不一致情况。

内容的提问来源于stack exchange,提问作者Muhammad Wasif Mushtaq

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 03:57:39