如何在另一个准备好的语句中使用 PreparedStatement 作为子查询
Posted
技术标签:
【中文标题】如何在另一个准备好的语句中使用 PreparedStatement 作为子查询【英文标题】:How to use a PreparedStatement as a subquery in another prepared statement 【发布时间】:2016-09-13 16:15:03 【问题描述】:我在代码中使用PreparedStatement
进行查询。例如:
PreparedStatement stmt = db.con.prepareStatement("select id from nodes where x>? and x<? and y>? and y<?");
stmt.setDouble(1, x1);
... //set a value for each param 1 thru 4
现在我有另一个查询想要使用与上面完全相同的查询作为子查询。所以我可以这样做:
PreparedStatement stmt2 = db.con.prepareStatement("select id from edges where startNodeId in
(select id from nodes where x>? and x<? and y>? and y<?)");
但这是重复的,我可能会修改第一个 PreparedStatement
并希望这些更改传播到第二个。有没有办法将准备好的语句设置为另一个语句中的子查询?
也许类似于stmt2.setPreparedStatement(2, stmt)
?
【问题讨论】:
不行。但是没有什么能阻止您在查询文本中重用字符串常量。你甚至可以编写一个辅助方法来设置 4 个参数。 正如@Andreas 所说,为了清楚起见,也许使用命名参数以便您可以正确引用它们? @KoosGadellaaPreparedStatement
不支持命名参数,仅支持位置参数。
你是对的。再次迷失在Springlation中
【参考方案1】:
只需将两个查询组合成一个SELECT
语句。
SELECT x,y,z FROM tablez WHERE id IN (SELECT id FROM "your first query")
【讨论】:
以上是关于如何在另一个准备好的语句中使用 PreparedStatement 作为子查询的主要内容,如果未能解决你的问题,请参考以下文章