Подтвердить что ты не робот

Невозможно выполнить операции манипуляции данными с помощью executeQuery()

В MySQL у меня есть две таблицы, tableA и tableB. Я пытаюсь выполнить два запроса:

executeQuery(query1) 
executeQuery(query2)

Но я получаю следующую ошибку:

can not issue data manipulation statements with executeQuery().

Что это значит?

4b9b3361

Ответ 1

Для управления данными, которые вам действительно нужны executeUpdate(), а не executeQuery().

Здесь выдержка из executeUpdate() javadoc, которая уже является ответом сама по себе:

Выполняет данный оператор SQL, который может быть оператором INSERT, UPDATE или DELETE или оператором SQL, который ничего не возвращает, например SQL DDL.

Ответ 2

При выполнении инструкции DML вы должны использовать executeUpdate/execute, а не executeQuery.

Вот краткое сравнение:

executeQueryVSexecuteUpdateVSexecute

Ответ 3

Используйте executeUpdate() для выдачи операторов манипулирования данными. executeQuery() предназначен только для запросов SELECT (т.е. запросов, возвращающих набор результатов).

Ответ 5

Если вы используете весеннюю загрузку, просто добавьте аннотацию @Modifying.

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

Ответ 6

Этот код работает для меня: я устанавливаю значения с 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;}

Ответ 7

ExecuteQuery ожидает набор результатов. Я не так хорошо знаком с Java/MySQL, но для создания индексов вам, вероятно, нужен ExecuteUpdate().

Ответ 8

Для запроса на удаление - используйте @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().

Ответ 9

Помимо executeUpdate() в круглых скобках, вы также должны добавить переменную для использования оператора SQL.

Например:

PreparedStatement pst =  connection.prepareStatement(sql);
int numRowsChanged = pst.executeUpdate(sql);