Androidlogging存在()在数据库中?

我正在寻找最快和正确的方法来检查数据库中是否存在一条logging:

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

你看到有什么问题吗?

Solutions Collecting From Web of "Androidlogging存在()在数据库中?"

考虑到mDb是你的SqlLiteDatabase

 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为一个String但是我认为它应该是一个Long
  • select 1select columnName更快,因为进程不需要从select子句中的表中检索所有值。
  • 你可以把stringselect 1 from...静态的最终常数更快。

这个问题和选定的答案对我了解如何简单快速地检查logging是否存在有帮助。 不过,我见过很多地方build议不要使用rawQuery因为可能会使用SQL注入。 (例如, rawQuery Vs. database.query )

所以这是我决定的:

 public boolean Exists(String searchItem) { String[] columns = { COLUMN_NAME }; String selection = COLUMN_NAME + " =?"; String[] selectionArgs = { searchItem }; String limit = "1"; Cursor cursor = db.query(TABLE_NAME, columns, selection, selectionArgs, null, null, null, limit); boolean exists = (cursor.getCount() > 0); cursor.close(); return exists; } 

我不知道这是否与选定的答案一样快,但经过研究,似乎更符合推荐的Android公约。

更新

我现在推荐@ yuku的答案,但我不会删除我的,因为我仍然要引导人们远离使用原始查询。

既然你正在寻找来自'可信和/或官方来源'的答案,在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; } 

尝试这个:

在你的DatabaseHelper中,把这个方法…

 public String Exist(String user) { String username=""; SQLiteDatabase db = this.getReadableDatabase(); try { Cursor c = db.query(TABLE_USER, null, KEY_USER + "=?", new String[]{String.valueOf(user)},null, null, null); if (c == null) { return username; } else { c.moveToFirst(); username = c.getString(c.getColumnIndex(KEY_USER)); } } catch(Exception e){ e.printStackTrace(); } return username; } 

然后在你的onClickListener中,尝试调用你在DatabaseHelper中创build的方法。 试试这个代码:

 String myUser = txtUser.getText().toString(); String storedUser = db.Exist(myUser); //If Username exist if (myUser.equals(storedUser)){ Toast.makeText(getApplicationContext(), "Username already exist!", Toast.LENGTH_SHORT).show(); 

检查我的答案在这里: Android Sqlite:检查表中是否存在行

这很好:

  Cursor cursor = null; String sql ="SELECT * FROM "+TableName+" WHERE ID="+idValue; cursor= db.rawQuery(sql,null); Log.d("ISEXISTS","Cursor Count : " + cursor.getCount()); boolean exists = (cursor.getCount() > 0); cursor.close();