Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Nie można wydać instrukcji manipulacji danymi za pomocą executeQuery()

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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pisanie podzapytania przy użyciu Zend DB

  2. Znajdź wolny pokój (system rezerwacji)

  3. LOAD DATA LOCAL INFILE nie działa z php 5.5 przy użyciu PDO

  4. Zagnieżdżone zapytanie wybierające MySQL?

  5. Jak utworzyć użytkownika z takimi samymi uprawnieniami jak root w MySQL/MariaDB?