我正在构建Java桌面应用程序,并将SQLite用于我的数据库。
我希望用户能够根据多个参数组合看到同一张表中的结果,但是他们还可以选择为其选择“全部”。
例如,如果我有一个包含“名称,年龄,品种”列的“狗”表,我希望用户能够看到所有狗或所有具有特定年龄的狗,或者具有特定品种的所有狗,或者具有一定年龄和品种。
是否可以在同一函数中编写所有这些代码,还是必须为每种参数组合构建一个单独的函数?
编辑 我用示例数据库的照片和我要运行的查询来更新我的问题,由@Vikdor的答案建议
SELECT * FROM Dogs
WHERE
CASE ""
when null then 1=1
else name=""
END
OR
CASE ""
when null then 1=1
else age=""
END
OR
CASE ""
when null then 1=1
else breed=""
END
在CASE语句之间不使用AND或OR都无法提供所需的结果。 例如,当我使用OR并将过滤器应用于最后两列时,
SELECT * FROM Dogs
WHERE
CASE ""
when null then 1=1
else name=""
END
OR
CASE "12"
when null then 1=1
else age="12"
END
OR
CASE "GR"
when null then 1=1
else breed="GR"
END
当然,它与12岁或具有GR的狗成排。 另外,当未指定过滤器时(所有列的CASE参数为“”),都不会返回任何行,尽管在这种情况下,我想返回所有行。
使用AND,无论过滤器是什么,我都不会得到任何行。
答案 0 :(得分:1)
您可以使用SQLite CASE表达式并对其进行构造,以便在指定过滤器时应用该过滤器,而在未指定过滤器的情况下,WHEN
子句返回true
。
例如
SELECT * FROM demo
WHERE
case "SQL"
when null then 1 = 1
else name = "SQL"
END
OR
case "Create public link DB"
when null then 1 = 1
else hint = "Create public link DB"
END
在上面的示例中,用应该从Java程序传递的参数替换CASE
表达式中的“ SQL”常量(您将使用PreparedStatement
或CallableStatement
还是用值替换那些参数,对吧?)