sql >> Databasteknik >  >> RDS >> Mysql

Kan inte utfärda datamanipuleringssatser med executeQuery()

Du måste använda metoden executeUpdate() för att köra INSERT-satsen, medan du måste använda executeQuery()-metoden för att köra SELECT-satsen. Detta beror på de krav som JDBC-specifikationen ställer på deras användningsområden:

Från Java API-dokumentationen för Statement.executeQuery() :

och från Java API-dokumentationen för Statement.executeUpdate() :

Din kod (pseudokod publicerad här) ska visas som:

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

Och naturligtvis, MySQL-dokumentationen visar hur man utför samma aktivitet för AUTO_INCREMENT-kolumner , vilket tydligen är vad du behöver.

Om du behöver köra båda tillsammans i samma transaktion, genom att skicka in satserna i en sträng med ett semikolon som skiljer dem åt på följande sätt:

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

då måste du använda metoden execute(). Observera att detta beror på det stöd som erbjuds av databasen och JDBC-drivrutinen för att batcha-satser tillsammans i en enda execute(). Detta stöds i Sybase och MSSQL Server, men jag tror inte att det stöds i MySQL.



  1. Oracle Rows to Column Transformation

  2. Hur CHARACTER_LENGTH()-funktionen fungerar i MySQL

  3. Applikationsanvändare kontra Row Level Security

  4. Få standardserievärde efter INSERT inuti PL/pgSQL