繁体   English   中英

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

[英]how to check if sqlite database is empty (android)?

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

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

使用以下查询来实现您的目标。 系统会自动创建两个表格-android_metadata和sqlite_sequence,因此我们在查询中应用了NOT条件。

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

尝试这个。

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

这只会告诉您TABLE是否为空,而不是DATABASE

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

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

然后测试count

您可以这样检查:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM