我编写了一个代码,用于将数据从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
的情况下插入数据?
答案 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();
}