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

Impossibile emettere istruzioni di manipolazione dei dati con executeQuery()

Sarà necessario utilizzare il metodo executeUpdate() per eseguire l'istruzione INSERT, mentre sarà necessario utilizzare il metodo executeQuery() per eseguire l'istruzione SELECT. Ciò è dovuto ai requisiti imposti dalla specifica JDBC sui loro utilizzi:

Dalla documentazione dell'API Java per Statement.executeQuery() :

e dalla documentazione dell'API Java per Statement.executeUpdate() :

Il tuo codice (pseudo-codice pubblicato qui) dovrebbe apparire come:

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

E, naturalmente, il La documentazione MySQL mostra come eseguire la stessa attività per le colonne AUTO_INCREMENT , che a quanto pare è ciò di cui hai bisogno.

Se è necessario eseguirli entrambi insieme nella stessa transazione, inviando le istruzioni in una stringa con un punto e virgola che le separa come segue:

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

quindi dovrai usare il metodo execute(). Si noti che ciò dipende dal supporto offerto dal database e dal driver JDBC per il batch di istruzioni insieme in un'unica esecuzione(). Questo è supportato in Sybase e MSSQL Server, ma non credo che sia supportato in MySQL.