例如,如果我有:
connection.prepareStatement("SELECT * FROM users
WHERE status=? AND otherAttribute=?");
在某些情况下,我可能需要特定状态,而在其他情况下,我需要所有状态。我怎么能基本上做类似的事情:
preparedStatement.setInt(1, mySpecificRequestedStatus);
以及其他情况:
preparedStatement.setInt(1, allStatuses); // wildcard
因此我不必拥有多个PreparedStatements,特别是对于SELECT语句中更复杂的WHERE子句,其中排列可以更高。
答案 0 :(得分:1)
你可以这样做:
connection.prepareStatement("SELECT * FROM users
WHERE (status=? OR ?=1) AND otherAttribute=?");
第二个?
用于“所有状态”属性:如果要忽略状态,请将其设置为1
;如果您希望考虑特定的status
,请将其设置为零。
答案 1 :(得分:1)
你没有选择,你必须选择我最初怀疑和问过的一个或另一个。
你可以:
这确实没有一个好的解决方案。这就是为什么要将ORM抽象出来的原因。问题是ORM引入了其他问题/复杂性以换取简化其他事情。
答案 2 :(得分:0)
Stephane Grenier,
为什么不在数据库中创建function or procedure
并从function or procedure
致电java
?这将解决许多麻烦,保持你的java代码整洁,当然没有硬编码的SQL查询。
问候