2009-12-15 7 views
61

En MySQL tengo dos tablas, tableA y tableB. Estoy tratando de ejecutar dos consultas:No se pueden emitir instrucciones de manipulación de datos con executeQuery()

executeQuery(query1) 
executeQuery(query2) 

Pero me sale el siguiente error:

can not issue data manipulation statements with executeQuery(). 

¿Qué significa esto?

+0

¿Tiene algún acceso a MySQL que no sea a través de JDBC - MySQL Administrator? O línea de comando? –

+0

tengo acceso a la administración de mysql. sin embargo, el requerimiento es tal que la base de datos mysql se creará, modificará, actualizará, etc. utilizando el administrador de mysql pero después de eso todas las operaciones deben realizarse con java. – silverkid

+0

Es mejor incluir la creación del índice en las secuencias de comandos para crear la base de datos que a través de JDBC, probablemente después de que ya las haya utilizado. –

Respuesta

132

Para manipular los datos que realmente necesita executeUpdate() en lugar de executeQuery().

He aquí un extracto de la executeUpdate() javadoc que ya es una respuesta a su propia:

Executes the given SQL statement, which may be an INSERT, UPDATE, or DELETE statement or an SQL statement that returns nothing, such as an SQL DDL statement.

2

ExecuteQuery espera un conjunto de resultados. No estoy tan familiarizado con Java/MySQL, pero para crear índices es probable que desee un ExecuteUpdate().

+1

No espera un 'ResultSet'. En su lugar ** devuelve ** un 'ResultSet'. – BalusC

+1

Se espera que un conjunto de resultados del DB sea lo que quiero decir. –

12

Utilice executeUpdate() para emitir instrucciones de manipulación de datos. executeQuery() solo está destinado a consultas SELECT (es decir, consultas que devuelven un conjunto de resultados).

-1

Además de executeUpdate() entre paréntesis, también debe agregar una variable para usar una instrucción SQL.

Por ejemplo:

PreparedStatement pst = connection.prepareStatement(sql); 
int numRowsChanged = pst.executeUpdate(sql); 
+0

¡Hola! Como advertencia, las preguntas y respuestas sobre Stack Overflow deben escribirse en inglés (de lo contrario, corren el riesgo de borrarse o de Google Translation). ¡Aclamaciones! (_Hola! Como las cabezas para arriba, las preguntas y respuestas sobre Stack Overflow debe estar escrito en Inglés (de lo contrario corren el riesgo de eliminación y/o Google Traductor). ¡Salud! _) –

7

Al ejecutar instrucción DML, se debe utilizar executeUpdate/execute en lugar de executeQuery.

Aquí es una breve comparación:

executeQueryVSexecuteUpdateVSexecute

1

Este código funciona para mí: He definido los valores pizca un INSERT y obtener la LAST_INSERT_ID() de este valor pizca de un SELECT; Yo uso java NetBeans 8.1, MySql y java.JDBC.driver

   try { 

     String Query = "INSERT INTO `stock`(`stock`, `min_stock`, 
       `id_stock`) VALUES (" 

       + "\"" + p.get_Stock().getStock() + "\", " 
       + "\"" + p.get_Stock().getStockMinimo() + "\"," 
       + "" + "null" + ")"; 

     Statement st = miConexion.createStatement(); 
     st.executeUpdate(Query); 

     java.sql.ResultSet rs; 
     rs = st.executeQuery("Select LAST_INSERT_ID() from stock limit 1");     
     rs.next(); //para posicionar el puntero en la primer fila 
     ultimo_id = rs.getInt("LAST_INSERT_ID()"); 
     } catch (SqlException ex) { ex.printTrace;} 
Cuestiones relacionadas