如何检查sqlite数据库是否为空(android)?

如何检查sqlite数据库是否为空(android)?,android,sqlite,Android,Sqlite,我正在制作一个媒体播放器,将歌曲的元数据加载到数据库中。 下面是我用来检查数据库是否为空但不工作的函数。请告诉我我的代码有什么问题,并建议更正或更好的替代方案 private static boolean isDbEmpty(SQLiteDatabase songsDb) { try { Cursor c = songsDb.rawQuery("SELECT * FROM " + SongsTable.TABLE_NAME, null); if (c.mo

我正在制作一个媒体播放器,将歌曲的元数据加载到数据库中。 下面是我用来检查数据库是否为空但不工作的函数。请告诉我我的代码有什么问题,并建议更正或更好的替代方案

private static boolean isDbEmpty(SQLiteDatabase songsDb) {
    try {
        Cursor c = songsDb.rawQuery("SELECT * FROM " + SongsTable.TABLE_NAME, null);
        if (c.moveToFirst()) {    // c.getCount() == 0  is also not working
            Log.d(TAG, "isDbEmpty: not empty");
            return false;
        }
        c.close();
    } catch (SQLiteException e) {
        Log.d(TAG, "isDbEmpty: doesn't exist");
        return true;
    }
    return true;
}

这只会告诉您
是否为空,而不是
数据库

无论如何,您可以使用如下代码:

Cursor countCursor = songsDb.rawQuery("select count(*) from " + SongsTable.TABLE_NAME, null);
countCursor.moveToFirst();
int count = countCursor.getInt(0);
countCursor.close();
然后测试
计数

试试这个

private static boolean isDbEmpty(SQLiteDatabase songsDb) {
    Cursor c = null;
    try {
        c = songsDb.rawQuery("SELECT * FROM " + SongsTable.TABLE_NAME, null);
        if (c == null || c.getCount() == 0) {
            return true;
        } else if (c.moveToFirst()) {
            Log.d(TAG, "isDbEmpty: not empty");
            return false;
        }
    } catch (SQLiteException e) {
        Log.d(TAG, "isDbEmpty: doesn't exist");
        return true;
    }finally {
        if(c != null){
            c.close();
        }
    }
    return true;
}

您可以这样检查:

Cursor c = songsDb.rawQuery("SELECT * FROM " + SongsTable.TABLE_NAME, null);
    cursor.moveToFirst();

    if (cursor != null && cursor.getCount() == 0) {
     //for empty
        return true;
    }else{
    // not empty
    return false;
  }

使用以下查询实现您的目标。有两个表是自动创建的——android_元数据和sqlite_序列,因此我们在查询中应用NOT条件

SELECT count(*) FROM sqlite_master WHERE type = 'table' AND name != 'android_metadata' AND name != 'sqlite_sequence';

c.getCount()==0也不工作
您遇到了什么问题?代码看起来基本正常;问题很可能是您的数据。@ρцσѕρєK c.getCount()返回169,即使数据库中没有条目。我不知道为什么会发生这种情况。在我看来,您可以使用
finally
块关闭光标,而不是将光标放在
catch
块中,
conditions
或超出
try catch
block的范围。@Enzokie实际上不会弄乱返回语句吗?编辑得不错,但您可以将其最小化,就像现在看起来很棒一样!不会,因为如果
c==null
返回true,则将不再调用
c.getCount==0