sql >> Database teknologi >  >> RDS >> Mysql

Kan ikke udstede datamanipulationserklæringer med executeQuery()

Du skal bruge executeUpdate()-metoden til at udføre INSERT-sætningen, mens du skal bruge executeQuery()-metoden til at udføre SELECT-sætningen. Dette skyldes de krav, som JDBC-specifikationen pålægger deres anvendelser:

Fra Java API-dokumentationen til Statement.executeQuery() :

og fra Java API-dokumentationen for Statement.executeUpdate() :

Din kode (pseudo-kode postet her) skal vises som:

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

Og selvfølgelig, MySQL-dokumentation viser, hvordan man udfører den samme aktivitet for AUTO_INCREMENT-kolonner , hvilket åbenbart er hvad du har brug for.

Hvis du har brug for at udføre dem begge sammen i samme transaktion, ved at indsende erklæringerne i én streng med et semikolon, der adskiller dem som følgende:

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

så skal du bruge execute() metoden. Bemærk, at dette afhænger af den understøttelse, der tilbydes af databasen og JDBC-driveren til at samle sætninger sammen i en enkelt execute(). Dette er understøttet i Sybase og MSSQL Server, men jeg tror ikke det er understøttet i MySQL.



  1. Brug af PHP og MySQL til at udfylde dropdown

  2. Brug af et DATO-felt som primær nøgle til en datodimension med MySQL

  3. Hvordan opdaterer man alle kolonner med INSERT ... ON CONFLICT ...?

  4. Ruby/PgSQL fejl ved Rails start:kan ikke indlæse en sådan fil -- pg_ext (LoadError)