在Java中使用單一語句執行多個資料庫查詢
MySQL允許使用分號 (;) 分隔符號在一個語句中執行多個查詢。但是,在Java中使用JDBC處理此操作預設情況下可能會拋出異常。
方法一:使用連線屬性
要啟用多個查詢執行,您可以在建立連線時指定allowMultiQueries
連線屬性:
<code class="language-java">String dbUrl = "jdbc:mysql:///test?allowMultiQueries=true"; Connection connection = DriverManager.getConnection(dbUrl, username, password);</code>
方法二:使用預存程序
或者,您可以在MySQL中建立一個包含多個查詢的預存程序。然後,您可以使用CallableStatement
從Java中呼叫該預存程序。例如下:
MySQL預存程序:
<code class="language-sql">CREATE PROCEDURE multi_query() BEGIN SELECT COUNT(*) AS name_count FROM tbl_mq; INSERT INTO tbl_mq (name) VALUES ('ravi'); SELECT LAST_INSERT_ID(); SELECT * FROM tbl_mq; END;</code>
Java程式碼:
<code class="language-java">CallableStatement cstmt = connection.prepareCall("{call multi_query()}"); boolean hasMoreResultSets = cstmt.execute(); while (hasMoreResultSets) { ResultSet rs = cstmt.getResultSet(); // 处理结果集 while (rs.next()) { // 处理每一行数据 } hasMoreResultSets = cstmt.getMoreResults(); }</code>
處理多個查詢
對於這兩種方法,您可以使用Statement
或CallableStatement
物件的getResultSet()
方法迭代結果。 getMoreResults()
方法傳回true
表示有更多結果可供處理,確保您捕捉多個查詢的所有結果。
注意:
請記住,像INSERT、UPDATE和DELETE這樣的DML(資料操作語言)語句不會傳回結果集,因此您應該單獨處理它們。 在處理結果集時,務必關閉ResultSet
和Statement
物件以釋放資源。 建議使用try-with-resources語句來確保資源的自動關閉。
以上是如何在單一 Java 語句中執行多個 MySQL 查詢?的詳細內容。更多資訊請關注PHP中文網其他相關文章!