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.