首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL Delete语句中的多个条件

问SQL Delete语句中的多个条件
EN

Stack Overflow用户
提问于 2020-03-16 14:08:03
回答 2查看 720关注 0票数 3

在web应用程序中,我将java与mysql结合使用。我想问一下这个说法是否有效。

代码语言:javascript
复制
String delete="DELETE FROM `eoms`.`order` WHERE (`employeeID` = '"+eID+"', orderTime = '"+mealName+"', orderDate = '"+curDate+"');";
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-03-16 14:20:22

是的,您的delete查询应该可以工作,但是您应该使用一个准备好的语句:

代码语言:javascript
复制
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交换即可。

票数 5
EN

Stack Overflow用户

发布于 2020-03-16 14:17:42

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

代码语言:javascript
复制
String delete="DELETE FROM `eoms`.`order` WHERE (`employeeID` = '"+eID+"' and orderTime = '"+mealName+"' and orderDate = '"+curDate+"')";

按照建议,对参数使用准备语句以避免SQL注入。

代码语言:javascript
复制
  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();
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60707488

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档