无法使用executeQuery()发出数据操作语句


97

在MySQL中,我有两个表,tableA和tableB。我正在尝试执行两个查询:

executeQuery(query1) 
executeQuery(query2)

但我收到以下错误:

can not issue data manipulation statements with executeQuery().

这是什么意思?


除了通过JDBC-MySQL Administrator之外,您还可以访问MySQL吗?还是命令行?
— OMG小马

我可以访问mysql admin。但是要求是这样的。mysql数据库将使用mysql admin进行创建,修改,更新等操作,但之后所有操作都必须使用java进行。
— 09年

比起使用JDBC,最好在使用脚本之后将索引创建包括在脚本中以创建数据库。
— OMG小马

Answers:


186

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

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

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


34

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

这是一个简短的比较:

executeQueryVSexecuteUpdateVSexecute


20

如果您使用的是Spring Boot,只需添加一个@Modifying注释。

@Modifying
@Query
(value = "UPDATE user SET middleName = 'Mudd' WHERE id = 1", nativeQuery = true)
void updateMiddleName();

2
春季启动存储库中的删除语句@Transactional将有所帮助
— Abhishek Chudekar

1
codar.club/blogs/5cd7f06bec80a.html解释了修改,事务和查询注释的用法。我使用以下方法解决了我的问题: @Modifying(clearAutomatically = true) @Transactional定义删除查询的@Query批注上方
— user666

16

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


12

对于“删除查询”-使用@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()错误。



4

这段代码对我有用:我将值设置为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;}

3

executeQuery()返回ResultSet。我对Java / MySQL不太熟悉,但是创建索引可能需要一个executeUpdate()。


2
它没有期望ResultSet。而是返回一个ResultSet。
— BalusC

2
它期望数据库的结果集是我的意思。
— 尼尔N

2
@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的本机查询在某种条件下删除记录,上述注释很重要。


-1

除了括号中的executeUpdate()外,还必须添加一个变量以使用SQL语句。

例如:

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

你好!请注意,有关Stack Overflow的问题和答案必须用英语撰写(否则可能会导致删除和/或Google翻译的风险)。干杯! (Hola!Como las cabezas para arriba,las preguntas y respuestas sobre Stack Overflow debe estar escrito enInglés(由Google Traductor发行。)
— Chris Forrence
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.