【发布时间】:2019-02-05 09:43:57
【问题描述】:
我正在使用 MySQL 数据库、Java 应用程序和 JDBC 进行通信。
这里的目标是选择符合某些条件的“食谱”,这是通过不根据 ID 选择(删除)某些食谱来实现的
我的 SQL 不是特别强,但是下面的代码在 MySQL Workbench 中使用时可以正常工作:
SELECT id FROM recipes WHERE(global_access = 1 OR owner = 1)
AND id NOT IN (1,2,3)
AND id NOT IN (
# Remove for brevity. Returns ID's to be excluded.
) );
具体来说,部分:
AND NOT IN (1,2,3)
应确保不返回 ID 为 1,2 或 3 的食谱。它在 PreparedStatement 中以 Java 字符串的形式出现。
String sql = "SELECT id FROM recipes WHERE(global_access = 1 OR owner = ?)
AND id NOT IN ( ? ) " .... (rest removed)
当我在 MySQL 工作台中运行此 SQL 时,它会正确过滤掉配方 (1,2,3)。但是,当我从 Java 运行它时,它不会。
我检查过传递的参数确实是1,2,3。
它没有给出任何错误,但似乎完全忽略了“AND NOT IN (1,2,3)”部分。
知道这是怎么发生的吗?
【问题讨论】:
-
您能分享一下您是如何设置这些值的(1,2,3)吗?
-
我会编辑帖子,这里不可读
-
in参数是否设置为整数数组?
-
不,它是“setString”,字符串由 ID 组成。我想我现在知道为什么了。 setString 将自动添加 ' ,因为它是一个字符串?
-
是的,您需要将其设置为列表/数组。对于字符串,它将被视为单个值“1,2,3”。