我写了一个表格的查询:
select .... where x.y in (?) union select .... where p.y in (?) and a.b not in (?)
问号表示我在运行时放置多个值的位置(使用preparedStatement.setString()方法动态地将值放入IN子句中。
结果集在执行此查询时似乎忽略了union子句后的查询。 我在任何地方都不例外。
我发布此问题,只是为了知道其他人是否遇到过这样的问题,比如此链接建议UNION of multiple tables and preparedstatement not working 数据库是Oracle 10g,以防万一。
答案 0 :(得分:1)
据我记忆 - 您无法使用?
in
运算符,但union
支持得很好。
您是否尝试将in
替换为=
?或者删除union
并检查它是否解决了问题?
答案 1 :(得分:1)
你只能使用'?' 单独值的运算符。使用String来设置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,使用尽可能多的'?'因为你有in-parameters然后循环并设置它们。这样你就可以结合使用动态查询来清理输入,避免任何SQL注入攻击。