単一ステートメントでの Java での複数のクエリの実行
JDBC は通常、単一のステートメントで複数のクエリを実行しようとすると例外を発生させます。 MySQL のクエリ ブラウザで利用できる機能。ただし、この機能を容易にする 2 つのアプローチがあります。
アプローチ 1: 複数のクエリの構成
データベース URL で "allowMultiQueries" 接続プロパティを "true" に設定するセミコロンで区切られた複数のクエリを有効にします。これは接続リクエスト中に指定する必要があります。
String dbUrl = "jdbc:mysql:///test?allowMultiQueries=true";
「executeBatch」を使用する代わりに、「execute(String sql)」を使用してクエリの実行結果を取得します。結果を反復処理し、次の手順を使用して処理します。
boolean hasMoreResultSets = stmt.execute(multiQuerySqlString); READING_QUERY_RESULTS: while (hasMoreElementsResultSets || stmt.getUpdateCount() != -1) { if (hasMoreElementsResultSets) { ResultSet rs = stmt.getResultSet(); // Handle result set here } else { // DDL/DML operation int queryResult = stmt.getUpdateCount(); if (queryResult == -1) { // No more queries break READING_QUERY_RESULTS; } // Handle success, failure, or generated keys here } hasMoreElementsResultSets = stmt.getMoreResults(); }
アプローチ 2: カーソルを使用したストアド プロシージャ
以下を含む複数のクエリを実行するストアド プロシージャを作成します。 select ステートメントと DML ステートメント。 「CallableStatement」を使用して Java からこのプロシージャを呼び出します。このアプローチにより、複数の ResultSet をキャプチャできます。ただし、DML 結果を直接キャプチャすることはできません。
CallableStatement cstmt = con.prepareCall("call multi_query()"); boolean hasMoreResultSets = cstmt.execute(); READING_QUERY_RESULTS: while (hasMoreElementsResultSets) { ResultSet rs = stmt.getResultSet(); // Handle result set here }
以上が単一の Java ステートメントで複数の SQL クエリを実行するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。