web-dev-qa-db-fra.com

Impossible d'émettre des instructions de manipulation de données avec executeQuery ()

Dans MySQL, j'ai deux tables, tableA et tableB. J'essaie d'exécuter deux requêtes:

executeQuery(query1) 
executeQuery(query2)

Mais j'obtiens l'erreur suivante:

can not issue data manipulation statements with executeQuery().

Qu'est-ce que ça veut dire?

83
silverkid

Pour manipuler les données dont vous avez réellement besoin, executeUpdate() plutôt que executeQuery() .

Voici un extrait du executeUpdate() javadoc qui est déjà une réponse en soi:

Exécute l'instruction SQL donnée, qui peut être une instruction INSERT, UPDATE ou DELETE ou une instruction SQL qui ne renvoie rien, telle qu'une instruction DDL SQL.

164
BalusC

Lors de l'exécution d'une instruction DML, vous devez utiliser executeUpdate/execute plutôt que executeQuery.

Voici une brève comparaison:

executeQueryVSexecuteUpdateVSexecute

21
Jaskey

Utilisez executeUpdate() pour émettre des instructions de manipulation de données. executeQuery() ne concerne que les requêtes SELECT (c'est-à-dire les requêtes qui renvoient un jeu de résultats).

15
OMG Ponies

C'est ce à quoi executeUpdate est destiné.

Voici un très bref résumé de la différence: http://www.coderanch.com/t/301594/JDBC/Java/Difference-between-execute-executeQuery-executeUpdate

5
Carl Smotricz

Si vous utilisez un démarrage à ressort, ajoutez simplement une annotation @Modifying.

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

Ce code fonctionne pour moi: je définis des valeurs avec un INSERT et obtient le LAST_INSERT_ID () de cette valeur avec un SELECT; J'utilise Java NetBeans 8.1, MySql et 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;}
4
Mati

ExecuteQuery attend un ensemble de résultats. Je ne connais pas aussi bien Java/MySQL, mais pour créer des index, vous voulez probablement un ExecuteUpdate ().

3
Neil N