2016-09-13 2 views
-2

Я использую PreparedStatement в своем коде для создания запросов. Например:Как использовать 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)?

+0

No can. Но ничто не мешает вам повторно использовать строчную константу с текстом запроса. Вы можете даже написать вспомогательный метод для установки 4 параметров. – Andreas

+0

Как @Andreas говорит, и, возможно, использовать именованные параметры для ясности, чтобы вы могли ссылаться на них правильно? –

+0

@KoosGadellaa 'PreparedStatement' не поддерживает именованные параметры, только позиционные. – Andreas

ответ

1

Просто объедините оба запроса в один оператор SELECT.

SELECT x,y,z FROM tablez WHERE id IN (SELECT id FROM "your first query")