数据库中是否存在 Android 记录()?

2022-09-01 22:00:01

我正在寻找最快,正确的方法来检查数据库中是否存在记录:

public boolean Exists(String _id) {
    Cursor c=db.query(TABLENAME(), new String[] {"1"}, "_ID="+_id, null, null, null, null);
    if (!c.equals(null))
        return c.moveToFirst();
    return false;
}

你觉得有什么问题吗?


答案 1

考虑这是你的类mDbSqlLiteDatabase

public boolean Exists(String _id) {
   Cursor cursor = mDb.rawQuery("select 1 from yourTable where _id=%s", 
        new String[] { _id });
   boolean exists = (cursor.getCount() > 0);
   cursor.close();
   return exists;
}
  • 我保留您的参数作为a,但我认为它应该是._idStringLong
  • select 1比因为该过程不需要从 select 子句中的表中检索所有值而更快。select columnName
  • 您可以将字符串放在静态最终常量中以更快。select 1 from...

答案 2

由于您正在从“可信和/或官方来源”中寻找答案,因此在DatabaseUtils中,我们有一个名为 的方法。queryNumEntries

所以你的方法可以像这样:

public boolean Exists(String _id) {
    return DatabaseUtils.queryNumEntries(db, TABLENAME(), "_ID=?", new String[] {"1"}) > 0;
}

或者,为了更快的速度:

public boolean Exists(String _id) {
    return DatabaseUtils.longForQuery(db, "select count(*) from " + TABLENAME() + " where _ID=? limit 1", new String[] {"1"}) > 0;
}

推荐