with example drivermanager controlador conectar con java mysql sql database jdbc

java - example - No se pueden emitir instrucciones de manipulación de datos con executeQuery()



jdbc mysql java (4)

Deberá usar el método executeUpdate () para ejecutar la instrucción INSERT, mientras que deberá usar el método executeQuery () para ejecutar la instrucción SELECT. Esto se debe a los requisitos impuestos por la especificación JDBC en sus usos:

De la documentación de la API de Java para Statement.executeQuery() :

Ejecuta la instrucción SQL dada, que devuelve un único objeto ResultSet.

Parámetros:

sql: una declaración SQL que se enviará a la base de datos, generalmente una instrucción SELECT de SQL estática

y de la documentación de la API de Java para Statement.executeUpdate() :

Ejecuta la instrucción SQL dada, que puede ser una instrucción INSERT, UPDATE, o DELETE o una instrucción SQL que no devuelve nada, como una instrucción DDL de SQL.

Parámetros:

sql: una declaración del lenguaje de manipulación de datos SQL (DML) , como INSERT, UPDATE o DELETE; o una declaración SQL que no devuelve nada , como una declaración DDL.

Su código (pseudo-código publicado aquí) debe aparecer como:

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

Y, por supuesto, la documentación de MySQL demuestra cómo realizar la misma actividad para las columnas AUTO_INCREMENT , que aparentemente es lo que necesita.

Si necesita ejecutar ambos juntos en la misma transacción, envíe las declaraciones en una cadena con un punto y coma que las separa de la siguiente manera:

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

entonces necesitarás usar el método execute (). Tenga en cuenta que esto depende del soporte ofrecido por la Base de datos y el controlador JDBC para agrupar las declaraciones en un solo execute (). Esto es compatible con Sybase y MSSQL Server, pero no creo que sea compatible con MySQL.

Esta pregunta ya tiene una respuesta aquí:

Yo uso com.mysql.jdbc.Driver

Necesito insertar y obtener id. Mi consulta:

INSERT INTO Sessions(id_user) VALUES(1); SELECT LAST_INSERT_ID() FROM Sessions LIMIT 1;

error

No se pueden emitir declaraciones de manipulación de datos con executeQuery ()

¿Cómo insertar y obtener identificación?



puede ser que esté utilizando executeQuery () pero para manipular los datos necesita realmente executeUpdate () en lugar de executeQuery ()


Connection connection = null; PreparedStatement preparedStatement = null; ResultSet generatedKeys = null; try { connection = m_Connection; preparedStatement = (PreparedStatement) connection.prepareStatement(qString, Statement.RETURN_GENERATED_KEYS); // ... int affectedRows = preparedStatement.executeUpdate(); if (affectedRows == 0) { throw new SQLException("Creating user failed, no rows affected."); } generatedKeys = preparedStatement.getGeneratedKeys(); int id = -1; if (generatedKeys.next()) { id = generatedKeys.getInt(1); id = -1; } else { throw new SQLException("Creating user failed, no generated key obtained."); } } finally { }