MySQLには2つのテーブルがtableA
ありtableB
ます。2つのクエリを実行しようとしています。
executeQuery(query1)
executeQuery(query2)
しかし、私は次のエラーを受け取ります:
can not issue data manipulation statements with executeQuery().
これは何を意味するのでしょうか?
MySQLには2つのテーブルがtableA
ありtableB
ます。2つのクエリを実行しようとしています。
executeQuery(query1)
executeQuery(query2)
しかし、私は次のエラーを受け取ります:
can not issue data manipulation statements with executeQuery().
これは何を意味するのでしょうか?
回答:
executeUpdate()
ではなく、実際に必要なデータを操作するにはexecuteQuery()
。
executeUpdate()
これは、それ自体ですでに回答となっているjavadoc からの抜粋です。
INSERT、UPDATE、DELETEステートメント、またはSQL DDLステートメントなど、何も返さないSQLステートメントである可能性がある、指定されたSQLステートメントを実行します。
Spring Bootを使用している場合は、@ Modifyingアノテーションを追加するだけです。
@Modifying
@Query
(value = "UPDATE user SET middleName = 'Mudd' WHERE id = 1", nativeQuery = true)
void updateMiddleName();
@Modifying(clearAutomatically = true) @Transactional
削除クエリを定義する@Queryアノテーションのすぐ上
クエリの削除- @Modifying
と@Transactional
の@Query
ように:-
@Repository
public interface CopyRepository extends JpaRepository<Copy, Integer> {
@Modifying
@Transactional
@Query(value = "DELETE FROM tbl_copy where trade_id = ?1 ; ", nativeQuery = true)
void deleteCopyByTradeId(Integer id);
}
java.sql.SQLException: Can not issue data manipulation statements with executeQuery()
エラーは発生しません。
それがそうです executeUpdate
が目的です。
違いの概要は次のとおりです。http://www.coderanch.com/t/301594/JDBC/java/Difference-between-execute-executeQuery-executeUpdate
このコードは私にとっては機能します。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()
を返しますResultSet
。私はJava / MySQLにはあまり詳しくありませんが、インデックスを作成するにはおそらくが必要ですexecuteUpdate()
。
ResultSet
。それは代わりに返しますResultSet
。
括弧のexecuteUpdate()の他に、SQLステートメントを使用するには変数を追加する必要もあります。
例えば:
PreparedStatement pst = connection.prepareStatement(sql);
int numRowsChanged = pst.executeUpdate(sql);