単一のステートメントで複数の JDBC クエリを効率的に実行する
JDBC は、単一のステートメント内で複数の SQL クエリを実行し、データベースの対話効率を高めるためのいくつかの方法を提供します。 1 つのアプローチには、allowMultiQueries
接続プロパティを利用することが含まれます。 この設定により、セミコロンで区切られた複数のクエリを 1 回の呼び出しで実行できます。
この機能を有効にするには、データベース URL に allowMultiQueries=true
を含めます:
<code class="language-java">String dbUrl = "jdbc:mysql:///test?allowMultiQueries=true";</code>
これを有効にすると、execute()
メソッドは複数のクエリを処理できます。 例:
<code class="language-java">String multiQuerySqlString = "SELECT * FROM table1; INSERT INTO table2 VALUES (1, 'value1');"; boolean hasMoreResultSets = stmt.execute(multiQuerySqlString);</code>
hasMoreResultSets
ブール値は、さらに結果セットが存在することを示します。 必要に応じて結果を繰り返し処理します。
<code class="language-java">while (hasMoreResultSets || stmt.getUpdateCount() != -1) { if (hasMoreResultSets) { ResultSet rs = stmt.getResultSet(); // Process ResultSet data here } else { int queryResult = stmt.getUpdateCount(); // Handle Data Manipulation Language (DML) statement results } hasMoreResultSets = stmt.getMoreResults(); }</code>
もう 1 つの効果的な手法には、複数のクエリを含むストアド プロシージャを作成することが含まれます。 このプロシージャは、CallableStatement
を使用して呼び出すことができます。 結果は複数の ResultSet
オブジェクトを介して取得されます。
<code class="language-java">String storedProcedure = "CALL multi_query()"; CallableStatement cstmt = con.prepareCall(storedProcedure); boolean hasMoreResultSets = cstmt.execute(); while (hasMoreResultSets) { ResultSet rs = cstmt.getResultSet(); // Process ResultSet data here hasMoreResultSets = cstmt.getMoreResults(); }</code>
allowMultiQueries
プロパティとストアド プロシージャは両方とも、単一の JDBC ステートメントを使用して複数のクエリを実行する効率的な方法を提供し、データベース操作を最適化します。
以上が単一の JDBC ステートメントで複数のクエリを実行するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。