0

我有一个包含 8 个字段的表单,根据其中输入的值,我必须从数据库中获取记录。现在问题出在 8 个字段中,用户可以填写任意数量的字段,并且也可以以任何顺序填写,例如,用户可以填写字段 1,4 和 6,或者他可以填写 1 和 7,或者他可以填写所有字段(当然他必须至少填写一个字段)...现在我将如何编写一个适用于任意数量和顺序的输入参数的查询?也因为这个查询将用于报告(iReport)我不允许用它写任何代码,它必须是一个 SQL 查询。有任何想法吗

谢谢

4

1 回答 1

0

有很多方法可以做到这一点。我在http://code.scottshipp.com/2013/03/29/tutorial-stored-procedures-with-truly-optional-有一篇关于在 Microsoft SQL (T-SQL) 存储过程中执行此类操作的博客文章参数/但您可能想要做一些更复杂的事情和/或您没有使用 MS SQL Server。您可能必须自己编写查询片段。我的建议是执行以下操作:

  1. 提交表单后,遍历表单中的各个字段,并检查它们的值是否为空。
  2. 对于那些不为空的,将包含相应查询片段的字符串添加到某些集合对象,如 ArrayList。请勿在此字符串中直接包含“AND”或“OR”。如果您需要跟踪此查询片段是否与其他查询片段进行了“AND”运算或“OR”运算,请在单独的集合对象中进行跟踪。我正在谈论的“查询片段”将显示在 SQL 查询的“where __ ”部分中。例如,假设搜索的是某人的姓氏。您添加的查询片段是一个字符串,上面写着“lastName='”+ lastNameField.value()+“'”。
  3. 一旦您遍历了表单中的所有各个字段并拥有一个充满查询片段的最终集合对象,就可以从中构造最终的 SQL 语句。遍历您的集合对象(本例中为 ArrayList),并用适当的“AND”或“OR”连接每个对象。假设您的 ArrayList 具有三个片段“firstName='Joe'”、“middleName='Q.'”、“lastName='Public'”。使用 StringBuilder 将这些片段继续添加到最终的 where 子句中:“firstName='Joe' AND middleName='Q.' AND lastName='Public'"...您可能希望将这些更改为带有通配符的“LIKE”样式查询。
  4. 您现在拥有创建最终选择语句所需的一切。将其发布到数据库并检索您的结果!
于 2013-05-14T23:39:52.150 回答