Исключение ResultSet - прежде запускается набора результатов

Я испытываю затруднения при получении данных из a 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)

Что я делаю неправильно здесь?

68
задан Mark Rotteveel 5 March 2016 в 13:30
поделиться

4 ответа

В основном, вы устанавливаете курсор перед первой строкой и затем запрашиваете данные. Нужно подвести курсор к первой строке.

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

Обычно это делается в операторе if или в цикле.

if(result.next()){
   foundType = result.getString(1);
}
146
ответ дан 24 November 2019 в 14:09
поделиться

Вы должны позвонить Далее () , прежде чем вы сможете начать чтение значений из первой строки. Forefirst ставит курсор до первого ряда, поэтому нет данных для чтения.

2
ответ дан 24 November 2019 в 14:09
поделиться

Вам нужно переместить указатель на первый ряд, прежде чем спрашивать данные:

result.beforeFirst();
result.next();
String foundType = result.getString(1);
1
ответ дан 24 November 2019 в 14:09
поделиться

Вы должны сделать result.next(), прежде чем вы сможете получить доступ к результату. Это очень распространенная идиома - делать

ResultSet rs = stmt.executeQuery();
while (rs.next())
{
   int foo = rs.getInt(1);
   ...
}
6
ответ дан 24 November 2019 в 14:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: