Java SQL Delete语句中的多个条件
我将java与mysql结合使用,用于web应用程序。我想问一下这句话是否行得通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
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子句。@标记是,你说得对……我想我下意识地过滤掉了逗号。