bugsoul Ответов: 1

Ошибка пустого курсора Sqlite?


Обычно этот код работает очень хорошо. Но если "курсор" пуст, то в нем есть ошибка. main.class. Я много чего перепробовал. Но мне это не удалось. Пожалуйста, помогите решить этот вопрос.

---- database.class ----

public List<Integer> count_a() {
    List<Integer> list = new ArrayList<Integer>();

    String selectQuery = "select book, count(date) from myTAB WHERE (date>'" + 0 + "') group by book"; 
// if result is empty, there is an error in main.class.
    SQLiteDatabase db = this.getReadableDatabase();
    Cursor cursor = db.rawQuery(selectQuery, null);

    if (cursor.moveToFirst()) {
        do {
            list.add(Integer.parseInt(cursor.getString(1)));
        }
        while (cursor.moveToNext());
    }

    cursor.close();
    db.close();
    return list;
}

---- main.class ----

private void load_data() {
    Database db = new Database(getApplicationContext());

    List<Integer> co_a = db.count_a(); // error is here

    Integer[] co_b = new Integer[co_a.size()];
    co_b = co_a.toArray(co_b);

    List_Row adapter = new List_Row(this, co_b);
    ListView lv = (ListView) findViewById(R.id.lvStat);
    lv.setAdapter(adapter);
}


Что я уже пробовал:

Неудача 1

if (cursor.moveToFirst()) {
        do {
            if (cursor.getCount() == 0 || cursor == null) {
                list.add(0);
            } else {
                list.add(Integer.parseInt(cursor.getString(1)));
            }
        }
        while (cursor.moveToNext());
    }

Отказ 2

if (cursor.moveToFirst()) {
        do {
            if(cursor.getCount() == 0){
                list.add(0);
            }else {
                list.add(Integer.parseInt(cursor.getString(1)));
            }
        }
        while (cursor.moveToNext());
    }

Неудача 3

if (cursor != null &amp;&amp; cursor.moveToFirst()) {
        do {
            if (cursor.getCount() &gt; 0) {
                list.add(Integer.parseInt(cursor.getString(1)));
            } else {
                list.add(0);
            }
        }
        while (cursor.moveToNext());
    }

Неудача 4

if (cursor.moveToFirst()) {
        do {
            if (cursor != null &amp;&amp; cursor.getCount() &gt; 0) {
                list.add(Integer.parseInt(cursor.getString(1)));
            } else {
                list.add(0);
            }
        }
        while (cursor.moveToNext());
    }

Неудача 5

if (cursor.moveToFirst()) {
        do {
            list.add(Integer.parseInt(cursor.getString(1)));
        }
        while (cursor.moveToNext());
    }
    if (cursor.isBeforeFirst()){
        do {
            list.add(0);
        }
        while (cursor.moveToNext());
    }

Peter Leow

Что вы подразумеваете под "нормально, этот код работает очень хорошо"? Что такое сообщение об ошибке? Откуда вы знаете,что это связано с пустым курсором? SelectQuery не кажется правильным.

Richard Deeming

И если вы хотите, чтобы кто-то помог вам исправить ошибку, то вам нужно сообщить нам подробности этой ошибки!

1 Ответов

Рейтинг:
0

ridoy

Общий шаблон для проверки" действительного " курсора таков :

if(cursor != null && cursor.getCount() > 0)