Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Kann keine Datenmanipulationsanweisungen mit executeQuery() ausgeben

Sie müssen die Methode executeUpdate() verwenden, um die INSERT-Anweisung auszuführen, während Sie die Methode executeQuery() verwenden müssen, um die SELECT-Anweisung auszuführen. Dies liegt an den Anforderungen, die die JDBC-Spezifikation an ihre Verwendung stellt:

Aus der Java-API-Dokumentation für Statement.executeQuery() :

und aus der Java-API-Dokumentation für Statement.executeUpdate() :

Ihr Code (hier geposteter Pseudocode) sollte folgendermaßen aussehen:

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

Und natürlich die Die MySQL-Dokumentation zeigt, wie dieselbe Aktivität für AUTO_INCREMENT-Spalten ausgeführt wird , was Sie anscheinend brauchen.

Wenn Sie beide zusammen in derselben Transaktion ausführen müssen, senden Sie die Anweisungen in einer Zeichenfolge mit einem Semikolon, das sie wie folgt trennt:

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

Dann müssen Sie die Methode execute() verwenden. Beachten Sie, dass dies von der Unterstützung abhängt, die von der Datenbank und dem JDBC-Treiber für das Stapeln von Anweisungen in einem einzigen execute() angeboten wird. Dies wird in Sybase und MSSQL Server unterstützt, aber ich glaube nicht, dass es in MySQL unterstützt wird.