2009-12-15 37 views
61

在MySQL中,我有兩個表tableAtableB。我試圖執行兩個查詢:無法使用executeQuery()發出數據操作語句

executeQuery(query1) 
executeQuery(query2) 

,但我得到了以下錯誤:

can not issue data manipulation statements with executeQuery(). 

這是什麼意思?

+0

除了通過JDBC - MySQL管理員以外,您是否有任何訪問MySQL的權限?或命令行? – 2009-12-15 06:46:42

+0

我有權訪問mysql管理員。然而要求是這樣的。 MySQL數據庫將被創建,修改,更新等使用MySQL管理員,但之後,所有的操作都需要用java來完成。 – silverkid 2009-12-15 06:52:54

+0

更好的方式是將索引創建包括在腳本中以創建數據庫,而不是通過JDBC,可能在您已經使用它們之後。 – 2009-12-15 06:56:49

回答

132

要操縱您實際需要的數據executeUpdate()而不是executeQuery()

下面是來自executeUpdate() javadoc中的提取物已經在自己的一個答案:

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預期的結果集。我不熟悉Java/MySQL,但創建索引可能需要ExecuteUpdate()。

+1

它不期望一個'ResultSet'。它而是**返回**一個'ResultSet'。 – BalusC 2009-12-15 06:48:27

+1

它期望來自數據庫的結果集是我的意思。 – 2009-12-15 13:46:51

12

使用executeUpdate()發出數據操作語句。 executeQuery()僅適用於SELECT查詢(即返回結果集的查詢)。

-1

除了圓括號上的executeUpdate(),還必須添加一個變量才能使用SQL語句。

例如:

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

你好!作爲提醒,Stack Overflow的問題和答案必須用英文書寫(否則他們有被刪除和/或谷歌翻譯的風險)。乾杯! (_Hola!Como las cabezas para arriba,las preguntas y respuestas sobre Stack Overflow debe estar escrito enInglés(de lo contrario corren el riesgo deeliminacióny/o Google Traductor)。Salud!_) – 2015-03-23 21:54:50

7

當執行DML語句,你應該使用executeUpdate/execute而非executeQuery

下面是一個簡單的比較:

executeQueryVSexecuteUpdateVSexecute

1

此代碼的工作對我來說:我設定值白衣的INSERT並獲得LAST_INSERT_ID()的這個數值絲毫一個SELECT;我使用java NetBeans 8.1,MySql和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;} 
相關問題