猿问

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

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

我很难从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)

我在这里做错什么了?


月关宝盒
浏览 853回答 3
3回答

千万里不及你

基本上,您是在第一行之前定位光标,然后请求数据。您需要将光标移动到第一行。 result.next();  String foundType = result.getString(1);在if语句或循环中这样做是很常见的。if(result.next()){    foundType = result.getString(1);}

森栏

每个答案都使用.next()或使用.preveFirst(),然后使用.next()。但为什么不是这样:result.first();因此,您只需将指针设置为第一个记录,然后从那里开始。它可以从java1.2开始使用,我只想对任何存在一个特定记录的ResultSet的人提及这一点。

幕布斯6054654

在访问结果之前,必须先执行结果.这是一个很常见的成语ResultSet rs = stmt.executeQuery();while (rs.next()){    int foo = rs.getInt(1);    ...}
随时随地看视频慕课网APP

相关分类

Java
我要回答