在web应用程序中,我将java与mysql结合使用。我想问一下这个说法是否有效。
String delete="DELETE FROM `eoms`.`order` WHERE (`employeeID` = '"+eID+"', orderTime = '"+mealName+"', orderDate = '"+curDate+"');";发布于 2020-03-16 14:20:22
是的,您的delete查询应该可以工作,但是您应该使用一个准备好的语句:
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交换即可。
发布于 2020-03-16 14:17:42
您应该将条件与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();https://stackoverflow.com/questions/60707488
复制相似问题