在MySQL中,我有两个表,tableA
和tableB
。我正在尝试执行两个查询:
executeQuery(query1)
executeQuery(query2)
但是我收到以下错误:
can not issue data manipulation statements with executeQuery().
这是什么意思?
答案 0 :(得分:161)
要操纵您实际需要的数据executeUpdate()
而不是executeQuery()
。
以下是来自executeUpdate()
javadoc的摘录,该摘录本身就是一个答案:
执行给定的SQL语句,该语句可以是INSERT,UPDATE或DELETE语句,也可以是不返回任何内容的SQL语句,例如SQL DDL语句。
答案 1 :(得分:18)
答案 2 :(得分:15)
使用executeUpdate()
发布数据操作语句。 executeQuery()
仅适用于SELECT查询(即返回结果集的查询)。
答案 3 :(得分:5)
这就是executeUpdate
的用途。
以下是差异的简短摘要:http://www.coderanch.com/t/301594/JDBC/java/Difference-between-execute-executeQuery-executeUpdate
答案 4 :(得分:4)
对于删除查询-在@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()
错误。
答案 5 :(得分:3)
ExecuteQuery需要一个结果集。我不熟悉Java / MySQL,但是要创建索引,你可能需要一个ExecuteUpdate()。
答案 6 :(得分:3)
这段代码对我有用:我设置了一个INSERT值,并获得了该值的LAST_INSERT_ID(),这是一个SELECT;我使用java NetBeans 8.1,MySql和java.JDBC.driver
-----------------------------------------
buyer itemX itemY sum of bid
-----------------------------------------
buyer13 item1 item2 350
buyer2 item1 item2 283
buyer65 item1 item2 236
buyer602 item3 item4 80
buyer703 item3 item4 76
buyer640 item3 item4 69
答案 7 :(得分:3)
@Modifying
@Transactional
@Query(value = "delete from cart_item where cart_cart_id=:cart", nativeQuery = true)
public void deleteByCart(@Param("cart") int cart);
不要忘记在@query之前添加@Modifying和@Transnational。它对我有用。
要使用JPA原生查询删除某些条件下的记录,上述注释很重要。
答案 8 :(得分:1)
如果您使用的是Spring Boot,只需添加一个@Modifying注释。
@Modifying
@Query
(value = "UPDATE user SET middleName = 'Mudd' WHERE id = 1", nativeQuery = true)
void updateMiddleName();
答案 9 :(得分:-1)
除了括号中的executeUpdate()之外,还必须添加一个变量来使用SQL语句。
例如:
PreparedStatement pst = connection.prepareStatement(sql);
int numRowsChanged = pst.executeUpdate(sql);