不能用executeQuery()发出数据操作语句

在MySQL中,我有两个表, tableAtableB 。 我试图执行两个查询:

 executeQuery(query1) executeQuery(query2) 

但是我得到以下错误:

 can not issue data manipulation statements with executeQuery(). 

这是什么意思?

操作数据实际上需要executeUpdate()而不是executeQuery()

下面是一个executeUpdate() javadoc的摘录,它本身已经是一个答案:

执行给定的SQL语句(可能是INSERT,UPDATE或DELETE语句或不返回任何内容的SQL语句,例如SQL DDL语句)。

使用executeUpdate()来发出数据操作语句。 executeQuery()仅用于SELECT查询(即返回结果集的查询)。

在执行DML语句时,应该使用executeUpdate / execute而不是executeQuery

这里是一个简单的比较:

executeQueryVSexecuteUpdateVSexecute

这是executeUpdate的用途。

下面是对这个区别的简要总结: http : //www.coderanch.com/t/301594/JDBC/java/Difference-between-execute-executeQuery-executeUpdate

ExecuteQuery需要一个结果集。 我不熟悉Java / MySQL,但创build索引可能需要一个ExecuteUpdate()。

这段代码适用于我:我设置值为一个INSERT,并获得这个值的LAST_INSERT_ID(); 我使用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;} 

除了括号中的executeUpdate()之外,还必须添加一个variables才能使用SQL语句。

例如:

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