java - 结果集异常 - 在结果集开始之前

标签 java jdbc

我在从 ResultSet 获取数据时遇到问题目的。这是我的代码:

    String sql = "SELECT type FROM node WHERE nid = ?";
    PreparedStatement prep = conn.prepareStatement(sql);
    int meetNID = Integer.parseInt(node.get(BoutField.field_meet_nid));
    prep.setInt(1, meetNID);

    ResultSet result = prep.executeQuery();
    result.beforeFirst();
    String foundType = result.getString(1);

    if (! foundType.equals("meet")) {
        throw new IllegalArgumentException(String.format("Node %d must be of type 'meet', but was %s", meetNID, foundType));
    }

错误跟踪:

Exception in thread "main" java.sql.SQLException: Before start of result set
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1072)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:986)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:981)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:926)
    at com.mysql.jdbc.ResultSetImpl.checkRowPos(ResultSetImpl.java:841)
    at com.mysql.jdbc.ResultSetImpl.getStringInternal(ResultSetImpl.java:5656)
    at com.mysql.jdbc.ResultSetImpl.getString(ResultSetImpl.java:5576)
    at nth.cumf3.nodeImport.Validator.validate(Validator.java:43)
    at nth.cumf3.nodeImport.Main.main(Main.java:38)

我在这里做错了什么?

最佳答案

基本上,您将光标定位在第一行之前,然后请求数据。您需要将光标移动到第一行。

 result.next();
 String foundType = result.getString(1);

在 if 语句或循环中执行此操作很常见。

if(result.next()){
   foundType = result.getString(1);
}

关于java - 结果集异常 - 在结果集开始之前,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62335022/

相关文章:

java - 具有 2 个不同数据库名称的 MySQL JDBC URL 故障转移

java - Mockito UnfinishedStubbingException 与 when().thenReturn()

java - Mysql+JDBC+Linux : executeQuery returns empty result set when it shouldn't

java - 数组只是打印出最后一个元素

java - 高效地将大量字节数据从C++传输到Java

java - 执行.jar时将OJBDC添加到类路径

Java:当语义不变时,提交 vs 回滚 vs 什么都不做?

java - Decorator模式链式方法如何调用?

java - Gradle 从 SVN 编译项目

java - pentaho 插件中未显示传出字段