根本不要像这样构建你的 SQL。而是使用参数化SQL,并设置各种参数值。
// You still need to escape the "order" table name as per Özkan's answer
String sql =
"INSERT INTO `order` (ODate, DDate, ShippingAddr, Email) VALUES (?, ?, ?, ?)";
try (PreparedStatement pst = conn.prepareStatement(sql))
{
pst.setDate(1, o.getOdate());
pst.setDate(2, o.getDdate());
pst.setString(3, o.getShippingAddr());
pst.setString(4, Email);
pst.executeUpdate();
}
这将:
- 避免SQL 注入攻击
- 当问题出在 SQL 和数据上时更清楚(您问题中的 SQL 问题实际上与日期无关,但他们最终混淆了问题)
- 将代码与数据分开
- 避免日期等的转换问题
请注意,我使用setDate
了ODate
andDDate
值。我希望它们是您数据库中的“日期”类型(或类似的东西),并且o.getODate()
返回一个Date
- 或者可能是一个 Joda Time 类型,例如LocalDate
. 如果您实际上只是对数据模型中的所有内容使用字符串,那是另一件需要修复的事情(紧急,IMO)。