如何将PreparedStatement与外键一起使用

时间:2018-04-30 08:29:54

标签: java jdbc

我正在一个员工项目中工作参与Java(使用NetBeans),我创建了两个表,一个用于员工的数据,另一个用于检查出勤率。

现在我想将第一个表的主键链接到第二个表,但我不知道如何。例如,如果您想检查出勤率,它将显示员工的ID以及何时(时间/时间)。

我尝试过:

这是第一张表:

CancellationToken

第二张表:

create table employee (
    empID int primary key auto_increment,
    fName varchar(100),
    civilId int,
    mobile int
);

并且在Java中我做到了但无法完成它:

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)
);

1 个答案:

答案 0 :(得分:2)

你在功能方面几乎做了一切。

如果可以避免,请不要使用整数和日期的文本字段。每个主要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);