SQL 删除语句中的多个条件

Multiple conditions in an SQL Delete statement

我将 java 与 mysql 结合用于 Web 应用程序。我想问问这个说法行得通吗

String delete="DELETE FROM `eoms`.`order` WHERE (`employeeID` = '"+eID+"', orderTime = '"+mealName+"', orderDate = '"+curDate+"');";

您应该将条件与 and 运算符结合起来

String delete="DELETE FROM `eoms`.`order` WHERE (`employeeID` = '"+eID+"' and orderTime = '"+mealName+"' and orderDate = '"+curDate+"')";

按照建议,为您的参数使用准备语句以避免 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();

是的,您的删除查询应该有效,但您应该使用准备好的语句:

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)命名您的 table(和其他数据库对象)。你将永远不得不在反引号中转义你的 order table 。此外,您似乎将订单时间和日期存储在单独的列中。这可能不是最佳做法,您应该考虑只对订单使用单个日期时间列。最后,也许您打算同时应用 WHERE 子句中的所有三个限制。如果是这样,那么只需将 ORAND 交换即可。