PostgreSQL中的Query错误没有返回任何结果

时间:2014-01-22 06:48:14

标签: java database jsp postgresql sql-insert

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

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

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

6 个答案:

答案 0 :(得分:63)

使用

executeUpdate

而不是

executeQuery

如果没有数据返回(即非SELECT操作)。

答案 1 :(得分:2)

请在 @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)都是如此

答案 2 :(得分:2)

使用@Modifying和@Transaction修复了我

答案 3 :(得分:1)

如果您想要上次生成的id,可以在使用executeUpdate()方法

后使用此代码
 int update = statement.executeUpdate()
 ResultSet rs = statement.getGeneratedKeys();
 if (rs != null && rs.next()) {
  key = rs.getLong(1);
 }

答案 4 :(得分:0)

使我想到这个问题的问题有点不同-使用基于接口的Spring JPA存储库删除行时出现此错误。原因是我的方法签名应该返回一些结果:

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

答案 5 :(得分:0)

我已经使用 addBatchexecuteBatch 解决了这个问题,如下所示:

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