sql >> Base de Datos >  >> RDS >> Mysql

No se pueden emitir declaraciones de manipulación de datos con executeQuery()

Necesitará usar el método executeUpdate() para ejecutar la declaración INSERT, mientras que necesitará usar el método executeQuery() para ejecutar la declaración SELECT. Esto se debe a los requisitos impuestos por la especificación JDBC sobre sus usos:

De la documentación de la API de Java para Declaración.executeQuery() :

y de la documentación de la API de Java para Declaración.ejecutarActualización() :

Su código (pseudocódigo publicado aquí) debería aparecer como:

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

Y por supuesto, el La documentación de MySQL muestra cómo realizar la misma actividad para las columnas AUTO_INCREMENT , que aparentemente es lo que necesitas.

Si necesita ejecutar ambos juntos en la misma transacción, envíe las declaraciones en una cadena con un punto y coma separándolas de la siguiente manera:

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

entonces necesitará usar el método execute(). Tenga en cuenta que esto depende del soporte ofrecido por la base de datos y el controlador JDBC para agrupar declaraciones en lotes en una sola ejecución(). Esto es compatible con Sybase y MSSQL Server, pero no creo que sea compatible con MySQL.