Android 检查空数据库会引发错误

Android 检查空数据库会引发错误,android,sqlite,Android,Sqlite,我有 但是当我在一个空数据库上运行它时,它崩溃了 有什么建议吗 错误是: public boolean isEmpty() { if (database == null) { database = dbHelper.getReadableDatabase(); // or similar method that } Cursor cursor = database.rawQuery("SELECT COUNT(*) FROM " + Database

我有

但是当我在一个空数据库上运行它时,它崩溃了

有什么建议吗

错误是:

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;
    }
}
我认为您需要将您的条件修改为:

Caused by: android.database.CursorIndexOutOfBoundsException: Index 0 requested, 
with a size of 0
说明: moveToFirst()是一种方便的方法,如果光标为空,则返回false。检查光标是否分配给
NULL
是不够的。您需要始终调用它您想要检查光标的状态,因为每个光标都隐式地位于第一行之前,所以您需要始终调用它


因为您选择的是
COUNT(*)
,所以它总是返回至少一行的COUNT值。您需要检查此值是否大于零。如果是,db不是空的。

那么,可能dbHelper没有返回数据库。您应该再次检查数据库是否为空

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;
}
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;
}
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;
        }
    }
}