2010-07-29 64 views
10

我想我的MySQL服務器上執行這樣的事情:我可以在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]); 

也能正常工作從控制檯,而不是從我的Java的PreparedStatement。它在';'處引發一個語法錯誤的異常分開陳述。我喜歡這個變量,因爲我不必重複查找子句,但如果有必要,我可以重寫它。與UNION子句相同的JOIN也有些尷尬。

感謝,

約書亞

+0

正如@ddimitrov所說,這似乎不可能直接。我沒有嘗試'PreparedStatement.addBatch()'。存儲過程也可能適用於此。 – 2010-08-28 03:52:33

+0

如果您對其他供應商感興趣,那麼CUBRID數據庫支持此功能。看到這個論壇帖子http://www.cubrid.org/forum/534638。 – Eye 2012-12-31 02:17:04

回答

5

JDBC從不支持解析分隔的查詢。每次調用都是到數據庫的一次訪問。也許你可以實現你爲每個單獨的查詢做PreparedStatement.addBatch()的意思,然後執行和檢索兩個結果集?

2

只是運行此作爲兩個單獨的查詢(一個連接中)應該給你同樣的結果。

+0

我希望避免兩次網絡時間,但這似乎是不可避免的。也許這是一個安全功能,可以避免SQL注入。 – 2010-07-29 21:58:30

+1

@Joshua,您可以批量查詢服務器並避免多次網絡旅程。 – ddimitrov 2010-08-08 15:22:19

相關問題