Będziesz musiał użyć metody executeUpdate(), aby wykonać instrukcję INSERT, podczas gdy będziesz musiał użyć metody executeQuery(), aby wykonać instrukcję SELECT. Wynika to z wymagań nałożonych przez specyfikację JDBC na ich zastosowania:
Z dokumentacji Java API dla Statement.executeQuery() :
oraz z dokumentacji Java API dla Statement.executeUpdate() :
Twój kod (opublikowany tutaj pseudokod) powinien wyglądać następująco:
statement.executeUpdate("INSERT INTO Sessions(id_user) VALUES(1)"); // DML operation
statement.executeQuery("SELECT LAST_INSERT_ID()"); // SELECT operation
I oczywiście Dokumentacja MySQL pokazuje, jak wykonać tę samą czynność dla kolumn AUTO_INCREMENT , co najwyraźniej jest tym, czego potrzebujesz.
Jeśli musisz wykonać oba z nich razem w tej samej transakcji, składając oświadczenia w jednym ciągu z średnikiem oddzielającym je w następujący sposób:
statement.execute("INSERT INTO Sessions(id_user) VALUES(1); SELECT LAST_INSERT_ID() FROM Sessions LIMIT 1;");
wtedy będziesz musiał użyć metody execute(). Należy zauważyć, że zależy to od obsługi oferowanej przez bazę danych i sterownik JDBC dla grupowania instrukcji w ramach jednej operacji execute(). Jest to obsługiwane w Sybase i MSSQL Server, ale nie sądzę, aby było obsługiwane w MySQL.