Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/401.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java SQL Delete语句中的多个条件_Java_Mysql_Sql_Sql Delete - Fatal编程技术网

Java SQL Delete语句中的多个条件

Java SQL Delete语句中的多个条件,java,mysql,sql,sql-delete,Java,Mysql,Sql,Sql Delete,我将java与mysql结合使用,用于web应用程序。我想问一下这句话是否行得通 String delete="DELETE FROM `eoms`.`order` WHERE (`employeeID` = '"+eID+"', orderTime = '"+mealName+"', orderDate = '"+curDate+"');"; 您应该将条件与和运算符组合在一起 String delete="DELETE FROM `eoms`.`order` WHERE (`employee

我将java与mysql结合使用,用于web应用程序。我想问一下这句话是否行得通

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

您应该将条件与
运算符组合在一起

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();

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

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
。您将永远不得不在backticks中退出
订单
表。此外,您似乎将订单时间和日期存储在单独的列中。这可能不是最佳实践,您应该考虑只使用一个DATE时间列。最后,您可能打算同时应用
WHERE
子句中的所有三个限制。如果是这样,只需将

交换即可学会使用参数!不要用常量咀嚼查询字符串!不要将输入连接到SQL字符串中。了解如何使用PreparedStatement确定MySQL DELETE语句是否“有效”的一种方法是首先将其编写为
SELECT
语句<代码>从eoms.order o中选择o.*,其中(o.emplyeeid=?和o.ordertime=?和o.ORDERDDATE=?)
然后验证SELECT语句是否“有效”,并返回要删除的行。然后我们可以用
删除
关键字替换
选择
关键字。。。(和前面的建议一样,使用带绑定占位符的预处理语句“little bobby tables”)@Gordon,如果我不使用
PreparedStatement
,会出现什么样的问题?“您的删除查询应该可以工作”,而不是问题中所示的where子句。@标记是,你说得对……我想我下意识地过滤掉了逗号。