检查空数据库会引发错误

时间:2013-04-08 20:48:35

标签: android sqlite

我有

public boolean isEmpty()
{
    if (database == null) {
        database = dbHelper.getReadableDatabase(); // or similar method that   
    }
    Cursor cursor = database.rawQuery("SELECT COUNT(*) FROM " + DatabaseHelper.TABLE_ENCOURAGEMENTS, null);
    if (cursor != null) {
        return false;
    } else {
        return true;
    }
}

但是当我在空数据库上运行它时,它会崩溃。

有什么建议吗?

错误是:

java.lang.IllegalStateException: Could not execute method of the activity
at android.view.View$1.onClick(View.java:2144)
Caused by: android.database.CursorIndexOutOfBoundsException: Index 0 requested, 
with a size of 0

2 个答案:

答案 0 :(得分:3)

Caused by: android.database.CursorIndexOutOfBoundsException: Index 0 requested, 
with a size of 0

我认为您需要将您的条件修改为:

public boolean isEmpty() {
   int count = -1;
   if (cursor != null && cursor.moveToFirst()) {
      count = cursor.getInt(0);
      if (count > 0) {
         return false;
      }
      else {
         return true;
      }
   }
   return true;
}

说明:

moveToFirst()是一种方便的方法,如果Cursor为空,则返回 false 。检查Cursor是否已分配给NULL是不够的。您需要始终调用它来检查Cursor的状态,因为每个Cursor都隐式定位在第一行之前,因此您需要始终调用它。

由于您选择的是COUNT(*),因此它始终至少返回一行带有计数值的行。您需要检查此值是否大于零。如果是,则db不为空。

答案 1 :(得分:0)

好吧,也许dbHelper没有返回数据库。您应该再次检查数据库是否为空。

public boolean isEmpty()
{
    if (database == null) {
        database = dbHelper.getReadableDatabase(); // or similar method that   
    }
    if (database != null) {
        Cursor cursor = database.rawQuery("SELECT COUNT(*) FROM " + DatabaseHelper.TABLE_ENCOURAGEMENTS, null);
        if (cursor != null) {
            return false;
        } else {
            return true;
        }
    }
}