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
相关产品推荐
相关产品推荐

