2

我有

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
4

2 回答 2

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是不够的。您需要始终调用它来检查光标的状态,因为每个光标都隐式定位在第一行之前,因此您需要始终调用它。

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

于 2013-04-08T20:53:19.700 回答
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;
        }
    }
}
于 2013-04-08T20:58:33.770 回答