在MySQL中,我有两个表,tableA
和tableB
。我正在尝试执行两个查询:
executeQuery(query1)
executeQuery(query2)
但我收到以下错误:
can not issue data manipulation statements with executeQuery().
这是什么意思?
在MySQL中,我有两个表,tableA
和tableB
。我正在尝试执行两个查询:
executeQuery(query1)
executeQuery(query2)
但我收到以下错误:
can not issue data manipulation statements with executeQuery().
这是什么意思?
Answers:
操作数据实际上是您需要的,executeUpdate()
而不是executeQuery()
。
以下是executeUpdate()
javadoc 的摘录,它本身已经是一个答案:
执行给定的SQL语句,该语句可以是INSERT,UPDATE或DELETE语句,也可以是不返回任何内容的SQL语句,例如SQL DDL语句。
如果您使用的是Spring Boot,只需添加一个@Modifying注释。
@Modifying
@Query
(value = "UPDATE user SET middleName = 'Mudd' WHERE id = 1", nativeQuery = true)
void updateMiddleName();
@Modifying(clearAutomatically = true) @Transactional
定义删除查询的@Query批注上方
对于“删除查询”-使用@Modifying
和@Transactional
之@Query
类的:-
@Repository
public interface CopyRepository extends JpaRepository<Copy, Integer> {
@Modifying
@Transactional
@Query(value = "DELETE FROM tbl_copy where trade_id = ?1 ; ", nativeQuery = true)
void deleteCopyByTradeId(Integer id);
}
它不会给出java.sql.SQLException: Can not issue data manipulation statements with executeQuery()
错误。
那executeUpdate
是为了什么
以下是有关差异的非常简短的摘要:http : //www.coderanch.com/t/301594/JDBC/java/Difference-between-execute-executeQuery-executeUpdate
这段代码对我有用:我将值设置为INSERT,并使用SELECT来获取此值的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()外,还必须添加一个变量以使用SQL语句。
例如:
PreparedStatement pst = connection.prepareStatement(sql);
int numRowsChanged = pst.executeUpdate(sql);