1

例如,如果我有:

connection.prepareStatement("SELECT * FROM users 
                                   WHERE status=? AND otherAttribute=?");

在某些情况下,我可能想要一个特定的状态,而在其他情况下,我想要所有的状态。我怎么能基本上做类似的事情:

preparedStatement.setInt(1, mySpecificRequestedStatus);

在其他情况下:

preparedStatement.setInt(1, allStatuses); // wildcard

这样我就不必有多个 PreparedStatements,尤其是对于 SELECT 语句中更复杂的 WHERE 子句,其中排列可能更高。

4

3 回答 3

1

你可以这样做:

connection.prepareStatement("SELECT * FROM users 
                               WHERE (status=? OR ?=1) AND otherAttribute=?");

第二个?是“所有状态”属性:1如果要忽略状态,请将其设置为;如果您希望status考虑具体情况,请将其设置为零。

于 2012-07-16T01:53:52.880 回答
1

你没有选择,你必须像我最初怀疑和问的那样选择一个或另一个。

您可以:

  1. 使用 if 子句创建复杂的预准备语句
  2. 创建一个没有最佳性能的复杂 SQL 语句

这个真的没有很好的解决办法。这就是 ORM 存在的原因,将其抽象出来。问题是 ORM 引入了其他问题/复杂性以换取简化其他事情。

于 2012-07-23T16:23:12.767 回答
0

斯蒂芬·格雷尼尔,

为什么不创建一个function or procedurein 数据库并调用function or procedurefrom java?这将解决许多麻烦,使您的 java 代码保持整洁,当然也没有 sql 查询的硬编码。

问候

于 2012-07-25T11:07:32.260 回答