我正在创建一个基于 Web 的小型工具,允许用户以各种方式查询大型查找表。由于它是一个小工具,我使用的是 JSP/Servlets。
查找表的定义如下:
第 1 列 | 第 2 列 | 第 3 列 | 日期 | 用户 | 数数
用户可以按列值或范围查询。此外,结果可以按特定列排序。因为该表有几十万条记录,并且增长迅速,所以我使用 Oracle 的 ROWNUM 并且只返回一小部分结果。
我有一个从用户那里获取搜索条件的表单页面。我根据一系列条件生成查询,例如:
query = "SELECT * FROM mytable WHERE 1=1 "
if(searchCriteria1 != "")
query += "AND column1='searchCriteria1' "
if(searchCriteria2 != "")
query += "AND column2='searchCriteria2' "
if(searchCriteria2 != "")
query += "AND column2='searchCriteria2' "
if(searchCriteria3 != "")
query += "AND column3='searchCriteria3' "
if((searchCriteria4 != "") && (searchCriteria5 != ""))
query += "AND date>='searchCriteria4' AND date<='searchCriteria5' "
etc...
(这只是简化的伪代码)
在显示第一个结果页面后处理排序。用户单击该页面的列标题以按该列排序。这将是回发并查询数据库。基本上,我在上面运行相同的代码,但最后是这样的:
if(sortColumn1)
query += "ORDER BY column1"
if(sortColumn2)
query += "ORDER BY column2"
if(sortColumn3)
query += "ORDER BY column3"
因此,正如您可能想象的那样,我的查询构建代码在所有这些不同的条件下都很长。关于更好的方法来做到这一点的任何建议?