web-dev-qa-db-ja.com

executeQuery()でデータ操作ステートメントを発行できません

MySQLには、tableAtableBの2つのテーブルがあります。 2つのクエリを実行しようとしています。

executeQuery(query1) 
executeQuery(query2)

しかし、次のエラーが表示されます。

can not issue data manipulation statements with executeQuery().

これは何を意味するのでしょうか?

83
silverkid

データを操作するには、実際には executeUpdate() ではなく executeQuery() が必要です。

以下はexecuteUpdate() javadocからの抜粋です。これはすでに独自の答えです。

指定されたSQLステートメントを実行します。これは、INSERT、UPDATE、DELETEステートメント、またはSQL DDLステートメントなどの何も返さないSQLステートメントです。

164
BalusC

DMLステートメントを実行するときは、executeUpdateではなくexecute/executeQueryを使用する必要があります。

以下に簡単な比較を示します。

executeQueryVSexecuteUpdateVSexecute

21
Jaskey

executeUpdate()を使用して、データ操作ステートメントを発行します。 executeQuery()は、SELECTクエリ(結果セットを返すクエリ)専用です。

15
OMG Ponies

それがexecuteUpdateの目的です。

違いの非常に簡単な要約を次に示します。 http://www.coderanch.com/t/301594/JDBC/Java/Difference-between-execute-executeQuery-executeUpdate

5
Carl Smotricz

スプリングブートを使用している場合は、@ Modifyingアノテーションを追加するだけです。

@Modifying
@Query
(value = "UPDATE user SET middleName = 'Mudd' WHERE id = 1", nativeQuery = true)
void updateMiddleName();
4
Forrest

このコードは私のために機能します:INSERTで値を設定し、SELECTでこの値のLAST_INSERT_ID()を取得します。 Java NetBeans 8.1、MySql、およびJava.JDBC.driverを使用します

                try {

        String Query = "INSERT INTO `stock`(`stock`, `min_stock`,   
                `id_stock`) VALUES ("

                + "\"" + p.get_Stock().getStock() + "\", "
                + "\"" + p.get_Stock().getStockMinimo() + "\","
                + "" + "null" + ")";

        Statement st = miConexion.createStatement();
        st.executeUpdate(Query);

        Java.sql.ResultSet rs;
        rs = st.executeQuery("Select LAST_INSERT_ID() from stock limit 1");                
        rs.next(); //para posicionar el puntero en la primer fila
        ultimo_id = rs.getInt("LAST_INSERT_ID()");
        } catch (SqlException ex) { ex.printTrace;}
4
Mati

ExecuteQueryには結果セットが必要です。私はJava/MySQLにはあまり詳しくありませんが、インデックスを作成するにはおそらくExecuteUpdate()が必要です。

3
Neil N