2017-02-21 65 views
0

因此,基本上,我想避免存儲過程,但在同一時間,我想would'nt多次往返於數據庫中執行順序語句。有一個java相當於MySQL的「多語句查詢」

顯然this blog說Facebook的使用MySQL的multiple-statement-queries。不幸的是,它的一個C API,是否有一個Java的等價物呢?

所以簡而言之,問題是「在java + mysql中,第二個jdbc語句如何使用第一個語句的輸出作爲輸入來執行,而不是往返數據庫並且沒有storedproc」?

如果沒有怎麼辦其他人解決這個問題?

+0

我從來沒有聽說過多個語句查詢。但是,如果要從Java執行多個MySQL語句,則始終可以使用事務。你在這裏想什麼? –

+0

@TimBiegeleisen我可以使用jdbc批處理,但問題不同。考慮一下Facebook博客中提到的簡單問題。第二條語句如何使用第一條語句的輸出作爲輸入來執行,而不是往返數據庫並且沒有storedproc? –

+1

我相信它已經在這裏找到答案:http://stackoverflow.com/questions/10797794/multiple-queries-executed-in-java-in-single-statement – Quintium

回答

0

這聽起來像你想做批處理。 這裏是一個很好的回答重複的問題: How to execute multiple SQL statements from java

+0

不,請參閱我對Tim的評論,批處理的問題是第二個語句按順序如何使用第一個語句的輸出作爲輸入? –

+0

對不起,我錯過了那部分。是否有可能使用嵌套的select語句完成你想要的內容? – ChrisThompson

+0

在很多情況下是(通過使用連接),但並非總是如此。 Mysql明確提供了一個C api(鏈接問題),我想如果在Java中有類似的東西。 –

1

是,JDBC驅動程序爲MySQL支持多語句查詢。然而,由於安全原因,它默認是禁用的,因爲多語句查詢顯着增加了與最終SQL注入相關的風險。

要打開多語句查詢的支持,只需將allowMultiQueries=true選項添加到您的連接字符串(或通過在地圖格式的相應選項)。您可以在這裏獲得關於該選項的更多信息:https://dev.mysql.com/doc/connector-j/5.1/en/connector-j-reference-configuration-properties.html

一旦啓用該選項,你可以簡單地執行類似的電話:statement.execute("select ... ; select ... ; select ...")。返回ResultSet s可以從Statement對象迭代:每次調用statement.getResultSet()返回下一個。使用statement.getMoreResults()來確定是否確實有更多可用的ResultSet

+0

請參閱此處的示例代碼:http://stackoverflow.com/questions/10797794/multiple-queries-executed-in-java-in-single-statement – jwatkins