MySQLには、tableA
とtableB
の2つのテーブルがあります。 2つのクエリを実行しようとしています。
executeQuery(query1)
executeQuery(query2)
しかし、次のエラーが表示されます。
can not issue data manipulation statements with executeQuery().
これは何を意味するのでしょうか?
データを操作するには、実際には executeUpdate()
ではなく executeQuery()
が必要です。
以下はexecuteUpdate()
javadocからの抜粋です。これはすでに独自の答えです。
指定されたSQLステートメントを実行します。これは、INSERT、UPDATE、DELETEステートメント、またはSQL DDLステートメントなどの何も返さないSQLステートメントです。
executeUpdate()
を使用して、データ操作ステートメントを発行します。 executeQuery()
は、SELECTクエリ(結果セットを返すクエリ)専用です。
それがexecuteUpdate
の目的です。
違いの非常に簡単な要約を次に示します。 http://www.coderanch.com/t/301594/JDBC/Java/Difference-between-execute-executeQuery-executeUpdate
スプリングブートを使用している場合は、@ Modifyingアノテーションを追加するだけです。
@Modifying
@Query
(value = "UPDATE user SET middleName = 'Mudd' WHERE id = 1", nativeQuery = true)
void updateMiddleName();
このコードは私のために機能します: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;}
ExecuteQueryには結果セットが必要です。私はJava/MySQLにはあまり詳しくありませんが、インデックスを作成するにはおそらくExecuteUpdate()が必要です。