2017-02-14 2 views
2

Я выполняю запрос Statement и сохраняю данные в ResultSet rs.Запрос относительно ResultSet

// if no record is returned by the query 

if (!rs.next()) { 
Step1 
} 

// if atleast one record is returned by the query 

if(rs.next()){ 
do { 

    if (rs.getString(1).equalsIgnoreCase("0")){ 
      Step2 
    } 

    if (rs.getString(1).equalsIgnoreCase("1")){ 
     Step3 
} 
}    while (rs.next()); 
} 

Однако, если я получаю только одну запись из запроса, никаких шагов не выполняется. Было бы очень полезно, если кто-нибудь может указать на ошибку.

+1

Примечание: 'if (condition) do {} while (condition);', если условие точно такое же, это то же самое, что 'while (condition) {}' if вы используете 'else', где вы можете добавить' Step1' – AxelH

ответ

3

Вы всегда пропускаете первый элемент, потому что вы дважды вызываете .next(), прежде чем принимать элемент. Попробуйте сделать что-то вроде этого:

if (rs.next()) { 
    // At least one record returned 
    do { 
     if (rs.getString(1).equalsIgnoreCase("0")) { 
      // Step2 
     } 

     if (rs.getString(1).equalsIgnoreCase("1")) { 
      // Step3 
     } 
    } while (rs.next()); 
} else { 
    // No records returned 
} 
5

Вы должны понимать, что именно next() способ делаю. next() перемещает курсор к следующему элементу. Когда вы пишете внутри, если условие прошло, и нет никаких элементов, когда дело доходит до while.

А почему вы не упростить код, просто делая

while (rs.next()) { 
    if (rs.getString(1).equalsIgnoreCase("0")){ 
      Step2 
    } 

    if (rs.getString(1).equalsIgnoreCase("1")){ 
     Step3 
} 
} 

Если вы входите в то время как цикл, есть элементы, в противном случае номер

+0

'ResultSet' не имеет' hasNext() 'method –

+0

Нет, это [' isLast() '] (http://docs.oracle.com /javase/7/docs/api/java/sql/ResultSet.html#isLast()) в наборе результатов. – AxelH

2

От JavaDoc ResultSet:

Перемещает курсор froward на одну строку с текущей позиции. Курсор ResultSet изначально позиционируется перед первой строкой; первый вызов метода next делает первую строку текущей строкой; второй вызов делает вторую строку текущей строкой и так далее.

В вашем коде вам не нужен второй вызов rs.next(), потому что курсор уже в первой строке.

2

Первоначально rs содержит одну запись или более точно указывает на набор результатов, имеющий одну запись.

Теперь, когда вызывается if(!rs.next()), rs переходит к следующей записи в результирующем наборе, которого нет, поскольку у вас есть только одна запись. Так что, если все идет хорошо. Но опять же, когда вы используете if(rs.next()), тогда rs не будет записывать, поэтому if не будет исполнен.

2

Вы не должны вызывать rs.next() метод дважды. Должна действовать следующая логика:

if (!rs.next()) { 
     Step1 
    } 
    else{ // if atleast one record is returned by the query 

     do { 
      if (rs.getString(1).equalsIgnoreCase("0")){ 
        Step2 
      } 
      if (rs.getString(1).equalsIgnoreCase("1")){ 
       Step3 
     } 
     }while (rs.next()); 
    } 
Смежные вопросы