PostgreSQL中的查询未返回任何结果错误

66

我正在尝试将数据插入表中。在执行查询后,我收到了一个异常提示

org.postgresql.util.PSQLException: No results were returned by the query.
org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery(AbstractJdbc2Statement.java:284)

数据已成功插入,但我不知道为什么会出现此异常??

7个回答

123

使用

executeUpdate

取代

executeQuery

如果不会返回任何数据(即非SELECT操作)。


太好了!完美地运行了...但是为什么executeUpdate可以工作,而executeQuery不能工作呢?在两种情况下,数据都被正确地插入了。 - Ragesh Kr
1
@RageshKr,它被正确地插入了,但是Java数据库连接器之后期望有数据传入,而没有数据传入。因此错误发生在插入操作之后。 - Paul Draper

36

请在@Query注释上方使用@Modifying注释。

@Modifying
@Query(value = "UPDATE Users set coins_balance = coins_balance + :coinsToAddOrRemove where user_id = :user_id", nativeQuery = true)
    int updateCoinsBalance(@Param("user_id") Long userId, @Param("coinsToAddOrRemove") Integer coinsToAddOrRemove); 

对于任何DML查询(即DELETE,UPDATE或INSERT),都是如此。


谢谢您,我想要一个 JPQL 查询的解决方案! - need_to_know_now

13

使用 @Modifying 和 @Transaction 解决了我的问题


2
它是 @Transactional。 - Aaban Tariq Murtaza
@Transactional @Modifying(clearAutomatically = true) @Query(value = Update/Delete/InstertQuery , nativeQuery = true) - Usman

6
这个问题与我的情况有点不同 - 我在使用基于接口的Spring JPA Repository 删除行时遇到了此错误。原因是我的方法签名应该返回一些结果:
@Modifying
@Query(value = "DELETE FROM table t WHERE t.some_id IN (:someIds)", nativeQuery = true)
List<Long> deleteBySomeIdIn(@Param("someIds") Collection<Long> someIds);

将返回类型更改为void解决了这个问题:
@Modifying
@Query(value = "DELETE FROM table t WHERE t.some_id IN (:someIds)", nativeQuery = true)
void deleteBySomeIdIn(@Param("someIds") Collection<Long> someIds);

2
如果您想获取最后生成的ID,可以在使用executeUpdate()方法后使用以下代码。
 int update = statement.executeUpdate()
 ResultSet rs = statement.getGeneratedKeys();
 if (rs != null && rs.next()) {
  key = rs.getLong(1);
 }

0
我使用addBatchexecuteBatch来解决这个问题,具体如下:

statement.addBatch("DELETE FROM public.session_event WHERE id = " + entry.getKey());
statement.executeBatch();

0
如果不需要返回数据,可以使用execute代替executeQuery
在执行包含DDL语句(如CREATE/ALTER/DROP)的脚本时,这也是很有用的。

1
你的回答可以通过提供更多的支持性信息来改进。请编辑以添加进一步的细节,例如引用或文档,以便他人可以确认你的回答是否正确。你可以在帮助中心找到关于如何撰写好回答的更多信息。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接