Java SQL返回搜索,即使不应执行检查

Java SQL返回搜索,即使不应执行检查,java,sql,Java,Sql,我有以下疑问: SELECT * FROM project WHERE year = 11 AND orderDate LIKE ? OR orderNo LIKE ? OR prodNo LIKE ? OR prodName LIKE ? OR inquiryDate LIKE ? OR confirmDate LIKE ? OR deliveryLT LIKE ? OR deliveryRiis LIKE ? OR signsPrice LIKE ? OR vrPric

我有以下疑问:

SELECT * FROM project WHERE   year = 11 AND orderDate LIKE ? OR  orderNo LIKE ? OR  prodNo LIKE ? OR  prodName LIKE ? OR  inquiryDate LIKE ? OR  confirmDate LIKE ? OR  deliveryLT LIKE ? OR  deliveryRiis LIKE ? OR  signsPrice LIKE ? OR  vrPrice LIKE ? OR  deliveryPrice LIKE ? OR  unexpectPrice LIKE ? OR  riisBonus LIKE ? OR  kennBonus LIKE ? OR  profit LIKE ? OR  profitPercent LIKE ? OR  quantity LIKE ?;
问题是,即使列年份不是11,我仍然收到数据,是因为我使用了还是?(使用问号是因为我使用了准备好的陈述)

当我这样做的时候

SELECT * FROM project WHERE   year = 11 AND orderDate LIKE ? ;
它工作正常,所以我假设它是OR是正确的吗?如果是,我如何解决它?我希望其中一个是真的,今年是100%真的

在“或”之前加上“和”的状态,因此您的SQL相当于:

SELECT * FROM project WHERE ( year = 11 AND orderDate LIKE ? ) OR  orderNo LIKE ?
OR  prodNo LIKE ? OR  prodName LIKE ? OR  inquiryDate LIKE ?
使用添加的括号覆盖它以满足您的要求:

SELECT * FROM project WHERE   year = 11 AND
 (orderDate LIKE ? OR  orderNo LIKE ?
  OR  prodNo LIKE ? OR  prodName LIKE ? OR  inquiryDate LIKE ?)

对,;并且是在
之前处理的,因此您基本上是在查询
年份=11和订单日期(如?
或是否满足任何其他条件)的所有项目

您需要使用括号来明确哪些条件适用于
,哪些条件应为
ed

我假设你希望它看起来像这样:

SELECT * FROM project WHERE   year = 11 AND (orderDate LIKE ? OR  orderNo LIKE ? OR  prodNo LIKE ? OR  prodName LIKE ? OR  inquiryDate LIKE ? OR  confirmDate LIKE ? OR  deliveryLT LIKE ? OR  deliveryRiis LIKE ? OR  signsPrice LIKE ? OR  vrPrice LIKE ? OR  deliveryPrice LIKE ? OR  unexpectPrice LIKE ? OR  riisBonus LIKE ? OR  kennBonus LIKE ? OR  profit LIKE ? OR  profitPercent LIKE ? OR  quantity LIKE ?)

非常感谢,我没有意识到语法的这一部分..虽然有意义,但我现在尝试一下,将返回结果。非常好用,非常感谢。如果允许的话,我会在9分钟内接受,你太快了:D