我正在将Java与mysql结合使用以用于Web应用程序。我想问一下这句话是否行得通。
String delete="DELETE FROM `eoms`.`order` WHERE (`employeeID` = '"+eID+"', orderTime = '"+mealName+"', orderDate = '"+curDate+"');";
是,您的删除查询应该可以,但是您应该使用准备好的语句:
String delete = "DELETE FROM `eoms`.`order` WHERE employeeID = ? OR orderTime = ? OR orderDate = ?";
PreparedStatement ps = conn.prepareStatement(delete);
ps.setInt(1, eID);
ps.setTime(2, orderTime);
ps.setDate(3, curDate);
int row = ps.executeUpdate();
System.out.println(row + " rows were deleted.");
旁注:请避免使用保留的SQL关键字(例如order
)命名表(和其他数据库对象)。您将永远不得不在反引号中转义order
表。同样,您似乎将订单时间和日期存储在单独的列中。这可能不是最佳做法,您应该考虑仅对订单使用单个datetime列。最后,也许您希望WHERE
子句中的所有三个限制同时适用。如果是这样,则只需将OR
替换为AND
。
您应将条件与and
运算符结合使用>
String delete="DELETE FROM `eoms`.`order` WHERE (`employeeID` = '"+eID+"' and orderTime = '"+mealName+"' and orderDate = '"+curDate+"')";
根据建议,对参数使用prepare语句,以避免SQL注入
String deleteQuery = "DELETE FROM `eoms`.`order` WHERE employeeID =? and orderTime =? and orderDate=? ";
PreparedStatement preparedStmt = conn.prepareStatement(deleteQuery);
preparedStmt.setInt(1, eID);
preparedStmt.setInt(2, mealName);
preparedStmt.setInt(3, curDate);
preparedStmt.executeUpdate();
conn.close();