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


97

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

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.