【问题标题】:Unable to get results from H2 db无法从 H2 db 获得结果
【发布时间】:2015-01-10 09:11:06
【问题描述】:

我正在尝试从 h2 db 中获取值,但总是收到此错误

 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)

我用谷歌搜索了答案

确保调用 rs.next();在使用任何 getter 方法之前。

但我确实调用了 rs.next() ...

这是我的代码:

public User getUser(int userId) throws SQLException {
    User u = new User(userId);

    try {
        Statement st = conn.createStatement();
        ResultSet rs = st.executeQuery("SELECT * FROM invited_users WHERE user_id=" + userId);
        rs.next();

        u.setName(rs.getString("user_name"));

    } catch (SQLException except) {
        JOptionPane.showMessageDialog(null, "Unable to load user! " + except);
    }
    return u;
}

【问题讨论】:

  • 可能你的结果集是空的
  • 检查ResultSet#next 是否返回false。如果是,则没有结果。
  • 这个 if(rs.next()) { u.setName(rs.getString("user_name")); }
  • @qqilihq 是的,这就是问题所在)谢谢!
  • 这是一个可怕的错误信息。当你知道问题是什么时,它是非常清楚的,而当你不知道时,它完全没有帮助。添加Did rs.next() return true? 将是一个巨大的改进。

标签: java h2 h2db


【解决方案1】:

问题出在结果集中,它是空的。

只需替换此代码

rs.next();

u.setName(rs.getString("user_name"));

if (rs.next()) {
    u.setName(rs.getString("user_name"));
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多