如何检查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
。