2015-03-15 2 views
-1

У меня есть тема для темы, когда я пытаюсь выполнить запрос в оболочке adb, выход в порядкеНевозможно выбрать первую строку в таблице

SELECT * FROM subject;

Выход 10 строк ...

Когда я сделать то же самое в Java/Android:

public ArrayList<Subject> getSubjectList() { 
    SQLiteDatabase db = DatabaseManager.getInstance().openDatabase(); 

    ArrayList<Subject> subjects = new ArrayList<Subject>(); 
    String selectQuery = "SELECT * FROM subject"; 
    Cursor cursor = db.rawQuery(selectQuery, null); 

    if (cursor.moveToFirst()) { 
     while (cursor.moveToNext()) { 
      Subject subject = new Subject(); 
      subject.setId_subject(Integer.parseInt(cursor.getString(0))); 
      subject.setName(cursor.getString(1)); 
      subjects.add(subject); 
     } 
    } 

    cursor.close(); 

    DatabaseManager.getInstance().closeDatabase(); 

    return subjects; 
} 

Выход 9 рядов ... первая строка с идентификатором 1 не будет отображать , Зачем?

+1

Потому что вы переходите к следующему ** ** ('moveToNext()') строки сразу после переезда на ** первый ** один ('moveToFirst()') ... –

+0

Вы правы, thanks :-) –

+0

Я добавил это как ответ, чтобы вы могли принять его и удалить сообщение из очереди без ответа. –

ответ

1

Поскольку Вы можете перейти к следующему ряду (moveToNext()) сразу после переезда на первого одного (moveToFirst()). ..

Что я обычно делаю, это примерно так:

 if (cursor != null) 
     { 
      if (cursor.moveToFirst()) 
      { 
       do 
       { 
        // ... 
       } 
       while (cursor.moveToNext()); 
      } 
     } 
0

Поскольку при вводе инструкции if вы принимаете moveToFirst(), то при первом входе в цикл while вы получаете .moveToNext(). Это означает, что вы пропустите первую запись.

Так используйте do... while() конструкцию вместо:

if (cursor.moveToFirst()) { 

    do { 
     Subject subject = new Subject(); 
     subject.setId_subject(Integer.parseInt(cursor.getString(0))); 
     subject.setName(cursor.getString(1)); 
     subjects.add(subject); 
    }while (cursor.moveToNext()) 
} 

Ссылка: http://docs.oracle.com/javase/tutorial/java/nutsandbolts/while.html

Смежные вопросы