根据来自的可变数量的输入从数据库中获取记录

时间:2013-05-14 20:39:33

标签: java

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

谢谢

1 个答案:

答案 0 :(得分:0)

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

  1. 提交表单后,循环遍历表单中的各个字段,并检查其值是否为空。
  2. 对于那些非空的,将一个包含适当的相应查询片段的字符串添加到某些集合对象,如ArrayList。不要在此字符串中直接包含“AND”或“OR”。如果需要跟踪此查询片段是否与其他查询片段进行“AND”编辑或“或”编辑,请在单独的集合对象中跟踪该查询片段。我正在讨论的“查询片段”是在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. 您现在拥有了创建最终select语句所需的一切。将它发送到数据库并检索结果!