sql >> Database >  >> RDS >> Mysql

Kan geen instructies voor gegevensmanipulatie uitgeven met executeQuery()

U moet de methode executeUpdate() gebruiken om de INSERT-instructie uit te voeren, terwijl u de methode executeQuery() moet gebruiken om de SELECT-instructie uit te voeren. Dit komt door de eisen die de JDBC-specificatie aan hun gebruik stelt:

Uit de Java API-documentatie voor Statement.executeQuery() :

en uit de Java API-documentatie voor Statement.executeUpdate() :

Uw code (pseudo-code hier gepost) zou moeten verschijnen als:

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

En natuurlijk de MySQL-documentatie laat zien hoe dezelfde activiteit voor AUTO_INCREMENT-kolommen kan worden uitgevoerd , wat blijkbaar is wat je nodig hebt.

Als u beide tegelijk in dezelfde transactie moet uitvoeren, door de verklaringen in één string in te dienen met een puntkomma als scheiding tussen hen, zoals als volgt:

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

dan moet je de methode execute() gebruiken. Merk op dat dit afhangt van de ondersteuning die wordt geboden door de database en het JDBC-stuurprogramma voor het samenvoegen van instructies in één enkele execute(). Dit wordt ondersteund in Sybase en MSSQL Server, maar ik denk niet dat het wordt ondersteund in MySQL.



  1. Hoe maak je een synoniem in mysql

  2. Kolomnaam ophalen met de maximale waarde in een rij sql

  3. Postgresql geaggregeerde array

  4. SQL Server Database Wijzigen Luisteraar C#