gpt4 book ai didi

java - 有没有一种方法可以使用 WHERE 子句查询 SQLite 数据库,但该子句并不总是设置所有属性?

转载 作者:行者123 更新时间:2023-12-02 09:17:40 26 4
gpt4 key购买 nike

我正在构建一个 Java 桌面应用程序并使用 SQLite 作为我的数据库。

我希望用户能够根据多个参数组合查看同一个表中的结果,但他们也可以选择“全部”。

例如,如果我有一个包含名称、年龄、品种列的狗表,我希望用户能够看到所有狗或具有特定年龄的所有狗或具有特定品种的所有狗或具有特定品种的所有狗一定的年龄和品种。

有没有办法将所有这些都写在同一个函数中,或者我是否必须为每个参数组合构建一个单独的函数?

编辑我正在用我的示例数据库的照片和我尝试运行的查询更新我的问题,由 @Vikdor 的答案建议 Database

    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

Output with OR

当然,它会与 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 程序传递的参数(您将使用 PreparedStatementCallableStatement 无论如何都要用值替换这些参数,对吧?)

关于java - 有没有一种方法可以使用 WHERE 子句查询 SQLite 数据库,但该子句并不总是设置所有属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58885143/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com