У MySQL у мене є дві таблиці tableA
і tableB
. Я намагаюся виконати два запити:
executeQuery(query1)
executeQuery(query2)
Але я отримую таку помилку:
can not issue data manipulation statements with executeQuery().
Що це означає?
У MySQL у мене є дві таблиці tableA
і tableB
. Я намагаюся виконати два запити:
executeQuery(query1)
executeQuery(query2)
Але я отримую таку помилку:
can not issue data manipulation statements with executeQuery().
Що це означає?
Відповіді:
Для маніпулювання даними вам насправді потрібен, executeUpdate()
а не executeQuery()
.
Ось витяг із executeUpdate()
javadoc, який вже є самостійною відповіддю:
Виконує даний оператор SQL, який може бути оператором INSERT, UPDATE або DELETE, або оператором SQL, який нічого не повертає, наприклад оператором SQL DDL.
Якщо ви використовуєте весняне завантаження, просто додайте анотацію @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 і отримую LAST_INSERT_ID () цього значення з SELECT; Я використовую 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;}
@Modifying
@Transactional
@Query(value = "delete from cart_item where cart_cart_id=:cart", nativeQuery = true)
public void deleteByCart(@Param("cart") int cart);
Не забудьте додати @Modifying та @Transnational перед @query. це працює для мене.
Для видалення запису з певною умовою за допомогою власного запиту з JPA важливі вищезазначені анотації.
Окрім executeUpdate () у дужках, ви також повинні додати змінну, щоб використовувати оператор SQL.
Наприклад:
PreparedStatement pst = connection.prepareStatement(sql);
int numRowsChanged = pst.executeUpdate(sql);