gpt4 book ai didi

java - 使用选择查询和 IN CLAUSE 联合的PreparedStatement 出现问题

转载 作者:行者123 更新时间:2023-12-02 08:20:17 27 4
gpt4 key购买 nike

我编写了以下形式的查询:

select .... where x.y in (?) union select .... where p.y in (?) and a.b not in (?) 

问号表示我使用preparedStatement.setString()方法在运行时放置多个值的位置(动态地将值放入IN子句中)。

执行此查询时的结果集似乎忽略了 union 子句之后的查询。我在任何地方都没有异常(exception)。

我发布这个问题,只是想知道其他人是否遇到过这样的问题,就像这个链接建议的 UNION of multiple tables and preparedstatement not working数据库是 Oracle 10g,以防有所不同。

最佳答案

您只能使用“?” 单独值的运算符。使用字符串设置 IN 值,您将得到...

SELECT * FROM TABLE WHERE ID IN (?)

...将被视为...

SELECT * FROM TABLE WHERE ID IN ("1,2,3,4")

...就你的情况而言。

如果您使用 JavaRanch 链接中的“选项 2”,它将像..

SELECT * FROM TABLE WHERE ID IN (1, 2, 3, 4)

...我相信这就是您想要的,但是您将需要始终提供恰好 4 个值。如果你的数量较少,你当然可以再次使用其中之一,不会产生任何不良影响,但如果你的数量较多,你就不走运了。

我建议您做的是动态构造PreparedStatement,并使用尽可能多的“?”因为您有内部参数,然后循环并设置它们。这样,您就可以将动态查询与清理输入结合起来,避免任何 SQL 注入(inject)攻击。

关于java - 使用选择查询和 IN CLAUSE 联合的PreparedStatement 出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5595773/

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