作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在构建一个 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 时,无论使用什么过滤器,我都不会得到任何行。
最佳答案
您可以使用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
在上面的示例中,将 CASE
表达式中的“SQL”常量替换为应从 Java 程序传递的参数(您将使用 PreparedStatement
或CallableStatement
无论如何都要用值替换这些参数,对吧?)
关于java - 有没有一种方法可以使用 WHERE 子句查询 SQLite 数据库,但该子句并不总是设置所有属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58885143/
我是一名优秀的程序员,十分优秀!