I am looking to the fastest and the correct way to check if a record exists in the database:
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; }
Do you see any problem with it?
Consider that mDb
is your SqlLiteDatabase
class
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; }
_id
as a String
but I think it should be a Long
.select 1
is more fast than select columnName
because the process doesn't need to retrieve all values from the table in the select clause.select 1 from...
in a static final constant to be even faster.Since you are looking for an answer from 'credible and/or official sources', here in DatabaseUtils
we have a method called queryNumEntries
.
So your method could be made like this:
public boolean Exists(String _id) { return DatabaseUtils.queryNumEntries(db, TABLENAME(), "_ID=?", new String[] {"1"}) > 0; }
Or, for faster one:
public boolean Exists(String _id) { return DatabaseUtils.longForQuery(db, "select count(*) from " + TABLENAME() + " where _ID=? limit 1", new String[] {"1"}) > 0; }
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With