2010-07-29 15 views
10

Mi piacerebbe per eseguire qualcosa di simile sul mio server MySQL:Posso utilizzare più istruzioni in una query preparata JDBC?

SET @id=(SELECT id FROM lookupTable WHERE field=?); 
(SELECT * FROM table2 WHERE [email protected]) 
UNION 
(SELECT * FROM table3 WHERE [email protected]) 
UNION 
(SELECT * FROM table4 WHERE [email protected]); 

Questo funziona bene dalla console, ma non dal mio Java PreparedStatement. Genera un'eccezione con un errore di sintassi al ';' separare le dichiarazioni. Mi piace la variabile perché non devo ripetere la clausola di ricerca, ma potrei riscriverla se necessario. L'equivalente JOIN è un po 'scomodo anche con le clausole UNION.

Grazie,

Joshua

+0

Come dice @ddimitrov, questo non sembra possibile direttamente. Non ho provato 'PreparedStatement.addBatch()'. Una procedura memorizzata potrebbe funzionare anche per questo. –

+0

Se sei interessato ad altri fornitori, il Database CUBRID supporta questa funzione. Vedi questo post sul forum http://www.cubrid.org/forum/534638. – Eye

risposta

5

JDBC non ha mai supportato l'analisi delle query delimitate. Ogni invocazione è un viaggio nel database. Forse puoi ottenere ciò che intendevi fare in PreparedStatement.addBatch() per ogni query separata, quindi eseguire e recuperare i due gruppi di risultati?

2

Proprio l'esecuzione di questo come due query separate (entro una connessione) dovrebbero dare gli stessi risultati.

+0

Speravo di evitare il doppio del tempo di rete, ma qui sembra inevitabile. Forse questa è una funzione di sicurezza per evitare l'iniezione SQL. –

+1

@Joshua, è possibile eseguire query batch sul server ed evitare i viaggi di rete multipli. – ddimitrov

Problemi correlati