我正在尝试将数据插入表中。执行查询后,我收到一个异常陈述
org.postgresql.util.PSQLException: No results were returned by the query.
org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery(AbstractJdbc2Statement.java:284)
数据已成功插入,但我不知道为什么我会收到此异常?
答案 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)
我已经使用 addBatch
和 executeBatch
解决了这个问题,如下所示:
statement.addBatch("DELETE FROM public.session_event WHERE id = " + entry.getKey());
statement.executeBatch();