Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Não é possível emitir instruções de manipulação de dados com executeQuery()


Você precisará usar o método executeUpdate() para executar a instrução INSERT, enquanto você precisará usar o método executeQuery() para executar a instrução SELECT. Isso se deve aos requisitos impostos pela especificação JDBC em seus usos:

Na documentação da API Java para Instrução.executeQuery() :

e da documentação da API Java para Statement.executeUpdate() :

Seu código (pseudo-código postado aqui) deve aparecer como:
statement.executeUpdate("INSERT INTO Sessions(id_user) VALUES(1)"); // DML operation
statement.executeQuery("SELECT LAST_INSERT_ID()"); // SELECT operation

E, claro, o A documentação do MySQL demonstra como realizar a mesma atividade para colunas AUTO_INCREMENT , que aparentemente é o que você precisa.

Se você precisar executar os dois juntos na mesma transação, enviando as instruções em uma string com um ponto e vírgula separando-as da seguinte forma:
statement.execute("INSERT INTO Sessions(id_user) VALUES(1); SELECT LAST_INSERT_ID() FROM Sessions LIMIT 1;");

então você precisará usar o método execute(). Observe que isso depende do suporte oferecido pelo banco de dados e pelo driver JDBC para agrupar instruções em lote em um único execute(). Isso é suportado no Sybase e no MSSQL Server, mas não acho que seja suportado no MySQL.