SQL Delete语句中的多个条件[关闭]

问题描述 投票:3回答:2

我正在将Java与mysql结合使用以用于Web应用程序。我想问一下这句话是否行得通。

String delete="DELETE FROM `eoms`.`order` WHERE (`employeeID` = '"+eID+"', orderTime = '"+mealName+"', orderDate = '"+curDate+"');";
java mysql sql sql-delete
2个回答
4
投票

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

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


1
投票

您应将条件与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();
© www.soinside.com 2019 - 2024. All rights reserved.