Java考勤项目中如何用PreparedStatement实现外键关联?
嘿,我来帮你搞定这个问题!在NetBeans里处理Java考勤项目的数据库关联和查询其实挺简单的,咱们一步步来:
1. 给考勤表添加外键关联员工表
首先得把员工表的empID主键关联到考勤表作为外键,分两种情况处理:
场景一:还没创建考勤记录表
如果你的考勤表还没建,直接在创建语句里包含外键约束就行,示例SQL如下:
CREATE TABLE attendance ( attendanceID INT PRIMARY KEY AUTO_INCREMENT, -- 考勤记录主键 empID INT, -- 关联员工表的ID checkInTime DATETIME, -- 上班打卡时间 checkOutTime DATETIME, -- 下班打卡时间 -- 核心:设置外键关联员工表 FOREIGN KEY (empID) REFERENCES employee(empID) ON DELETE CASCADE -- 可选:删除员工时自动删除其考勤记录 ON UPDATE CASCADE -- 可选:更新员工ID时同步更新考勤表的对应字段 );
解释下:FOREIGN KEY (empID) 指定考勤表的empID是外键,REFERENCES employee(empID) 明确关联到员工表的主键empID。后面的ON DELETE/UPDATE CASCADE是可选规则,根据你的业务需求选择是否添加。
场景二:已经创建了考勤记录表
要是考勤表已经存在,就用ALTER TABLE语句添加外键约束:
ALTER TABLE attendance ADD CONSTRAINT fk_attendance_employee -- 外键约束名称,可自定义 FOREIGN KEY (empID) REFERENCES employee(empID);
在NetBeans里执行SQL的方法
打开NetBeans的Services面板,找到你的数据库连接,右键选择「Connect」,然后右键打开「Execute Command」窗口,把上面的SQL粘贴进去,点击运行按钮就行。
2. 查询考勤信息的SQL语句
根据你的需求,要查询员工ID及上下班打卡时间,基础的查询语句就够用:
SELECT empID, checkInTime, checkOutTime FROM attendance;
如果想确保只返回存在有效员工的考勤记录(避免出现不存在的empID),可以用INNER JOIN关联员工表:
SELECT a.empID, a.checkInTime, a.checkOutTime FROM attendance a INNER JOIN employee e ON a.empID = e.empID;
3. 在Java代码中调用查询(可选)
要是你需要在NetBeans的Java项目里执行这个查询,用JDBC的示例代码如下:
import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; public class AttendanceViewer { public static void main(String[] args) { // 替换成你的数据库信息 String dbUrl = "jdbc:mysql://localhost:3306/your_database_name"; String dbUser = "your_db_username"; String dbPassword = "your_db_password"; try (Connection conn = DriverManager.getConnection(dbUrl, dbUser, dbPassword); Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery("SELECT empID, checkInTime, checkOutTime FROM attendance")) { // 遍历查询结果 while (rs.next()) { int empID = rs.getInt("empID"); String checkInTime = rs.getTimestamp("checkInTime").toString(); String checkOutTime = rs.getTimestamp("checkOutTime").toString(); System.out.printf("员工ID: %d | 上班打卡时间: %s | 下班打卡时间: %s%n", empID, checkInTime, checkOutTime); } } catch (Exception e) { e.printStackTrace(); } } }
记得把代码里的数据库URL、用户名和密码替换成你自己的。
内容的提问来源于stack exchange,提问作者AhmadAlharbi
相关产品推荐
相关产品推荐

