2009-12-15 9 views
61

In MySQL sono presenti due tabelle, tableA e tableB. Sto provando ad eseguire due query:Impossibile emettere istruzioni di manipolazione dei dati con executeQuery()

executeQuery(query1) 
executeQuery(query2) 

Ma ottengo il seguente errore:

can not issue data manipulation statements with executeQuery(). 

Cosa significa?

+0

Avete accesso a MySQL oltre che tramite JDBC - Amministratore MySQL? O riga di comando? –

+0

ho accesso a mysql admin. tuttavia il requiement è tale che. il database mysql verrà creato, modificato, aggiornato, ecc. usando l'admin di mysql ma dopo di che tutte le operazioni devono essere eseguite con java. – silverkid

+0

Meglio includere la creazione dell'indice negli script per creare il database piuttosto che tramite JDBC, probabilmente dopo averli già utilizzati. –

risposta

132

Per manipolare i dati è effettivamente necessario executeUpdate() anziché executeQuery().

Ecco un estratto del executeUpdate() javadoc, che è già una risposta a propria:

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 si aspetta un set di risultati. Non ho familiarità con Java/MySQL, ma per creare indici probabilmente vuoi un ExecuteUpdate().

+1

Non si aspetta un 'ResultSet'. Invece ** restituisce ** un 'ResultSet'. – BalusC

+1

Si aspetta che un set di risultati dal DB sia ciò che intendo. –

12

Utilizzare executeUpdate() per emettere istruzioni di manipolazione dei dati. executeQuery() è inteso solo per le query SELECT (ovvero query che restituiscono un set di risultati).

-1

Oltre a executeUpdate() tra parentesi, è necessario aggiungere una variabile per utilizzare un'istruzione SQL.

Ad esempio:

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

Ciao! A titolo di heads up, le domande e le risposte su Stack Overflow devono essere scritte in inglese (altrimenti corrono il rischio di cancellazione e/o traduzione di Google). Saluti! (_Hola! Como las cabezas para arriba, las preguntas y respuestas sobre Stack Overflow debe estar escrito it Inglés (de lo contrario corren el riesgo de eliminación y/o Google Traductor). ¡Salud! _) –

7

Quando si esegue un'istruzione DML, è necessario utilizzare executeUpdate/execute piuttosto che executeQuery.

Ecco un breve confronto:

executeQueryVSexecuteUpdateVSexecute

1

Questo codice funziona per me: ho impostato valori briciolo un INSERT e ottenere il LAST_INSERT_ID() di questo valore briciolo un SELECT; Uso java NetBeans 8.1, MySql e 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;} 
Problemi correlati