Mysql
 sql >> база данни >  >> RDS >> Mysql

Не може да издава изрази за манипулиране на данни с executeQuery()

Ще трябва да използвате метода executeUpdate(), за да изпълните оператора INSERT, докато ще трябва да използвате метода executeQuery(), за да изпълните оператора SELECT. Това се дължи на изискванията, наложени от спецификацията на JDBC за тяхното използване:

От документацията на Java API за Statement.executeQuery() :

и от документацията на Java API за Statement.executeUpdate() :

Вашият код (псевдокод, публикуван тук) трябва да изглежда като:

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

И разбира се, Документацията на MySQL демонстрира как да извършите същата дейност за AUTO_INCREMENT колони , което очевидно е това, от което се нуждаете.

Ако трябва да изпълните и двете заедно в една и съща транзакция, като изпратите изявленията в един низ с точка и запетая, разделяща ги както следва:

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

тогава ще трябва да използвате метода execute(). Имайте предвид, че това зависи от поддръжката, предлагана от базата данни и JDBC драйвера за групиране на оператори заедно в едно изпълнение(). Това се поддържа в Sybase и MSSQL Server, но не мисля, че се поддържа в 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. Как мога да коригирам MySQL Load Error

  2. При използване на ini_set('max_execution_time', 0);

  3. Защо XAMPP не е подходящ за производство?

  4. Да се ​​добави ли идентификатор за автоматично увеличение към съществуваща таблица?

  5. mysqli - извикване на грешка fetch_Array към функция-член fetch_array() на mysqli без обект