Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法使用executeQuery()发出数据操作语句_Java_Mysql_Jdbc - Fatal编程技术网

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

Java 无法使用executeQuery()发出数据操作语句,java,mysql,jdbc,Java,Mysql,Jdbc,在MySQL中,我有两个表,tableA和tableB。我正在尝试执行两个查询: executeQuery(query1) executeQuery(query2) 但我得到了以下错误: can not issue data manipulation statements with executeQuery(). 这意味着什么?操作您实际需要的数据,而不是 下面是executeUpdate()javadoc的摘录,它本身就是一个答案: 执行给定的SQL语句,该语句可以是INSERT、UPD

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

executeQuery(query1) 
executeQuery(query2)
但我得到了以下错误:

can not issue data manipulation statements with executeQuery().

这意味着什么?

操作您实际需要的数据,而不是

下面是
executeUpdate()
javadoc的摘录,它本身就是一个答案:

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


这就是
executeUpdate
的作用

下面是一个非常简短的差异摘要:

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

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

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

例如:

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

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

以下是一个简单的比较:


这段代码适用于我:我使用INSERT设置值,并使用SELECT获取该值的最后一个\u INSERT\u 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;}

如果您使用的是SpringBoot,只需添加一个@Modifying注释即可

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

对于删除查询-在
@query
之前使用
@Modifying
@Transactional
,如:-

@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);

}

修改 @交易的 @查询(value=“从购物车项目中删除,其中购物车id=:购物车”,nativeQuery=true) 公共无效deleteByCart(@Param(“cart”)int cart);
不要忘记在@query之前添加@Modifying和@Transnational。它对我有用


要使用带JPA的本机查询删除带有某些条件的记录,上述注释非常重要。

除了通过JDBC-MySQL管理员之外,您还有其他访问MySQL的权限吗?还是命令行?我可以访问mysql管理员。然而,要求是这样的。mysql数据库将使用mysql admin创建、修改、更新等,但之后所有操作都需要使用java完成。最好在脚本中包含索引创建来创建数据库,而不是通过JDBC创建数据库,这可能是在您可能已经使用它们之后。它不需要
结果集
。相反,它返回一个
ResultSet
。我的意思是,它需要一个来自数据库的结果集。您好!作为提醒,关于堆栈溢出的问题和答案必须用英语书写(否则会有被删除和/或谷歌翻译的风险)。干杯spring boot repository@Transactional中的delete语句将有助于解释修改、事务和查询注释的用法。我使用@Query注释正上方的
@Modifying(clearAutomatically=true)@Transactional
解决了我的问题,该注释定义了我想要的删除查询
By default, CRUD methods on repository instances are transactional. For read operations, 
the transaction configuration readOnly flag is set to true. 
All others are configured with a plain @Transactional so that default transaction 
configuration applies.
Indicates a query method should be considered as modifying query as that changes the way 
it needs to be executed. This annotation is only considered if used on query methods defined 
through a Query annotation). It's not applied on custom implementation methods or queries 
derived from the method name as they already have control over the underlying data access 
APIs or specify if they are modifying by their name.

Queries that require a @Modifying annotation include INSERT, UPDATE, DELETE, and DDL 
statements.