Java の単一ステートメントを使用して複数のデータベース クエリを実行します
MySQL では、セミコロン (;) 区切り文字を使用して 1 つのステートメントで複数のクエリを実行できます。ただし、JDBC を使用して Java でこの操作を処理すると、デフォルトで例外がスローされる場合があります。
方法 1: 接続属性を使用する
複数のクエリの実行を有効にするには、接続を確立するときに allowMultiQueries
接続属性を指定できます。
<code class="language-java">String dbUrl = "jdbc:mysql:///test?allowMultiQueries=true"; Connection connection = DriverManager.getConnection(dbUrl, username, password);</code>
方法 2: ストアド プロシージャを使用する
あるいは、複数のクエリを含むストアド プロシージャを 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 中国語 Web サイトの他の関連記事を参照してください。