В 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);