2

我正在将 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)

4

1 回答 1

7

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

一定要打电话

rs.next();

在使用任何 getter 方法之前。

于 2013-05-27T00:46:52.170 回答