Невозможно выполнить операторы манипулирования данными с executeQuery () - PullRequest
80 голосов
/ 15 декабря 2009

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

executeQuery(query1) 
executeQuery(query2)

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

can not issue data manipulation statements with executeQuery().

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

Ответы [ 8 ]

161 голосов
/ 15 декабря 2009

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

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

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

19 голосов
/ 22 апреля 2016

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

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

executeQueryVSexecuteUpdateVSexecute

15 голосов
/ 15 декабря 2009

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

5 голосов
/ 15 декабря 2009

Вот для чего executeUpdate.

Вот очень краткое изложение различий: http://www.coderanch.com/t/301594/JDBC/java/Difference-between-execute-executeQuery-executeUpdate

3 голосов
/ 17 мая 2017

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

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

2 голосов
/ 15 апреля 2019

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

@Modifying
@Query
(value = "UPDATE user SET middleName = 'Mudd' WHERE id = 1", nativeQuery = true)
void updateMiddleName();
0 голосов
/ 23 марта 2015

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

Например:

PreparedStatement pst =  connection.prepareStatement(sql);
int numRowsChanged = pst.executeUpdate(sql);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...