从jdbc向mysql插入可选字段值

时间:2016-04-05 07:05:39

标签: java mysql jdbc

我编写了一个代码,用于将数据从jdbc textfield插入mysql DB。

String res ="INSERT INTO reservation(check_in_date,check_out_date,cus_id,room_no,Username,nights,adults,kids) VALUES ('"+Startdate+"','"+Lastdate+"','"+cusNo+"','"+Roomno+"','"+Username+"','"+Nights +"','"+Adults +"','"+Kids +"')";

stm=link.prepareStatement(res);
stm.execute();

在此代码中,Kids变量可以为null,我已将其设置为'数据库中的默认值为null。

但是当我从GUI输入数据时,我应该总是输入Kids的值,否则我无法将数据插入到表中。 因此,如果我不需要使用该字段,则必须始终向Kids输入零。 当没有必要使用该字段时,有没有办法在没有输入Kids的情况下插入数据?

1 个答案:

答案 0 :(得分:1)

您错误地使用了PreparedStatement。您不应将值连接到查询中,而是使用参数占位符。这可以防止SQL注入,它通常更清晰。

您可以通过这种方式将值设置为null。

String res = "INSERT INTO reservation(check_in_date,check_out_date,cus_id,room_no,Username,nights,adults,kids)" 
        + " VALUES (?,?,?,?,?,?,?,?)";
try (PreparedStatement stm=link.prepareStatement(res)) {
    stmt.setDate(1, startDate);
    // ... other variables

    // Option 1, assuming kids is an object (eg Integer)
    stm.setObject(7, kids);

    // Option 2, kids is int and other condition used to determine if null,
    // explicitly set null or set value:
    if (kidsIsNull) {
        stm.setNull(7, Types.INTEGER);
    } else {
        stm.setInt(7, kids);
    }
    stm.executeUpdate();
}