2009-12-15 54 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;}