无法在 H2 中查看最近插入的结果

Posted

技术标签:

【中文标题】无法在 H2 中查看最近插入的结果【英文标题】:Unable to view recently inserted results in H2 【发布时间】:2013-05-27 00:38:25 【问题描述】:

我正在将 H2 数据库系统用于我正在处理的一个小型 Java 项目。如果我手动运行查询,一切都会按预期运行,但是当我运行我的程序时,我会得到以下信息:

Constructed: INSERT INTO library VALUES (null,'TEMPORARY_EFFECT_1369614387100','asdf',0,0,0,0,0)
Constructed: SELECT id FROM library WHERE name='TEMPORARY_EFFECT_1369614387100'
org.h2.jdbc.JdbcSQLException: No data is available [2000-171]
    at org.h2.message.DbException.getJdbcSQLException(DbException.java:329)
    at org.h2.message.DbException.get(DbException.java:169)
    at org.h2.message.DbException.get(DbException.java:146)
    at org.h2.message.DbException.get(DbException.java:135)
    at org.h2.jdbc.JdbcResultSet.checkOnValidRow(JdbcResultSet.java:2956)
    at org.h2.jdbc.JdbcResultSet.get(JdbcResultSet.java:2962)
    at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:306)

我不确定发生了什么。根据 JDBC 和 H2 的 JavaDocs,我做对了(我认为)。 INSERT 是通过调用 db.createStatement().executeUpdate(...)SELECT via db.prepareStatement(..., ResultSet.TYPE_SCROLL_INSENSITIVE) 来执行的

【问题讨论】:

【参考方案1】:

此异常通常是由于在调用 ResultSet's getter 方法之一之前未调用 Resultset#next 引起的,在这种情况下似乎是 getInt

一定要打电话

rs.next();

在使用任何 getter 方法之前。

【讨论】:

谢谢!不完全是这样,但这有助于解决我的问题!在使用实用函数计算行数后,我没有重新计算结果集。再次感谢!

以上是关于无法在 H2 中查看最近插入的结果的主要内容,如果未能解决你的问题,请参考以下文章

SpringBoot配置web访问H2

如何在内存数据库中使用 H2 测试 EntityManager 查询

芹菜 - 无法获取任务结果

无法在 h2 内存数据库中插入数据

将 select 和 dateadd 函数中的结果集插入到同一个表中

sql查找ID并在没有找到结果时插入