我正在使用Java(使用NetBeans)进行员工考勤项目,我创建了两个表,一个用于员工数据,另一个用于检查考勤。
现在我想将第一个表的主键链接到第二个表,但我不知道如何。例如,如果您想检查出勤情况,它将显示员工的 ID 和时间(上类/超时)。
我尝试过的:
这是第一个表:
create table employee (
empID int primary key auto_increment,
fName varchar(100),
civilId int,
mobile int
);
第二个表:
create table employeeAttendance (
id int primary key auto_increment,
empID int not null,
timeIn time,
timeOut time,
daay date,
constraint emp_fk foreign key (empID) references employee (empID)
);
在 Java 中我做到了这一点,但无法完成它:
String sql="insert into employeeAttendance(empID,timeIn,daay)values(?,?,?)";
pstmt = conn.prepareStatement(sql);
pstmt.setString(1,.getText());
pstmt.setString(2,timeLabel.getText());
pstmt.setString(3,dateLabel.getText());
最佳答案
就功能而言,您几乎做对了所有事情。
如果可以避免,请不要使用整数和日期的文本字段。每个主要的 UI 框架都有这种特殊类型的字段,因此请使用它们!
但是,您应该使用 PreparedStatement
的正确 setter 方法。如果您的列是 int,则应使用 ps.setInt
,如果您有时间/时间戳/日期列,则应使用 ps.setDate
。
所以你的 Java 代码看起来像这样
SimpleDateFormatter sdf = new SimpleDateFormatter("dd.MM.yyyy");
java.util.Date jtimeIn = sdf.parse(timeLabel.getText());
java.sql.Date stimeOut = new java.sql.Date(jdate.getTime()); //This part is important, jdbc uses java.sql.Dates!
java.util.Date jdaay = sdf.parse(dateLabel.getText());
java.sql.Date sdaay = new java.sql.Date(jdaay.getTime()); //This part is important, jdbc uses java.sql.Dates!
String sql="insert into employeeAttendance(empID,timeIn,daay)values(?,?,?)";
pstmt = conn.prepareStatement(sql);
pstmt.setInt(1,Integer.parseInt(empIDAsText));
pstmt.setDate(2,stimeOut);
pstmt.setString(3,sdaay);
关于java - 如何使用带有外键的PreparedStatement,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50096701/