Mysql
 sql >> Base de données >  >> RDS >> Mysql

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

Vous devrez utiliser la méthode executeUpdate() pour exécuter l'instruction INSERT, tandis que vous devrez utiliser la méthode executeQuery() pour exécuter l'instruction SELECT. Cela est dû aux exigences imposées par la spécification JDBC sur leurs utilisations :

À partir de la documentation de l'API Java pour Statement.executeQuery() :

et de la documentation de l'API Java pour Instruction.executeUpdate() :

Votre code (pseudo-code posté ici) devrait apparaître comme :

statement.executeUpdate("INSERT INTO Sessions(id_user) VALUES(1)"); // DML operation
statement.executeQuery("SELECT LAST_INSERT_ID()"); // SELECT operation

Et bien sûr, le La documentation MySQL montre comment effectuer la même activité pour les colonnes AUTO_INCREMENT , ce qui est apparemment ce dont vous avez besoin.

Si vous devez les exécuter ensemble dans la même transaction, en soumettant les instructions dans une chaîne avec un point-virgule les séparant comme suit :

statement.execute("INSERT INTO Sessions(id_user) VALUES(1); SELECT LAST_INSERT_ID() FROM Sessions LIMIT 1;");

alors vous devrez utiliser la méthode execute(). Notez que cela dépend de la prise en charge offerte par la base de données et le pilote JDBC pour regrouper les instructions en un seul execute(). Ceci est pris en charge dans Sybase et MSSQL Server, mais je ne pense pas que ce soit pris en charge dans MySQL.