不能用executeQuery()发出数据操作语句
在MySQL中,我有两个表, tableA
和tableB
。 我试图执行两个查询:
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
。
这里是一个简单的比较:
这是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);