Подтвердить что ты не робот

В базе данных существует запись Android()?

Я ищу самый быстрый и правильный способ проверить, существует ли запись в базе данных:

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

Вы видите какие-либо проблемы с этим?

4b9b3361

Ответ 1

Учтите, что 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 1 быстрее, чем select columnName, потому что для процесса не требуется извлекать все значения из таблицы в предложении select.
  • вы можете поместить строку select 1 from... в статическую конечную константу еще быстрее.

Ответ 2

Этот вопрос и выбранный ответ были полезны для меня, чтобы понять, как просто и быстро проверить, выходит ли запись. Тем не менее, я видел много мест, которые рекомендуют не использовать 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, но я не буду удалять мою, потому что я все еще хочу отвести людей от использования необработанных запросов.

Ответ 3

Поскольку вы ищете ответ из "достоверных и/или официальных источников", здесь в 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;
}

Ответ 4

Попробуйте следующее:

В вашем 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. Попробуйте этот код:

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();

Ответ 6

Это хорошо работает:

  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();