Android SQL – Compruebe si toda la fila ya existe en la base de datos

Estoy tratando de crear una simple aplicación de favoritos, donde puedes guardar tus páginas favoritas (de la web, por ejemplo).

Digamos que tengo los siguientes datos en mi base de datos

Title | URL | TAG | ------------------------------- Hey Ho.com Site Jo Jo.com Image Jo Mo.com Image 

Ahora quiero asegurarme, el usuario no agrega la misma página dos veces, así que comprobaré si el valor ya existe. Pero necesito que el usuario no agregue un sitio a la tabla que se ha agregado ya.

Así que digamos que intentaría agregar:

 Title | URL | TAG | ------------------------------- Jo Mo.com Image 

Esto devolvería true (para "comprobar si existe fila", porque ya existe una fila idéntica).

Pero si quisiera agregar:

 Title | URL | TAG | ------------------------------- Jo Go.com Image 

Devolvería false (aunque el título ya existe), porque no hay una fila idéntica.

Este es el código en el que agrego mis datos a la base de datos con:

 public long createNote(String title, String url, String rn) { ContentValues initialValues = new ContentValues(); initialValues.put(KEY_TITLE, title); initialValues.put(KEY_URL, url); initialValues.put(KEY_RN, rn); return mDb.insert(DATABASE_TABLE, null, initialValues); 

¿Cómo puedo comprobar si una fila ya existe en una base de datos?

Puede comprobar con el cursor:

 public boolean checkEvent(String title, String URL, String tag) { SQLiteDatabase db = this.getReadableDatabase(); Cursor cursor = db.query(TABLES, new String[] { KEY_TITLE,KEY_URL,KEY_TAG }, KEY_TITLE + " = ? and "+ KEY_URL + " = ? and " + KEY_TAG + " = ?" , new String[] {title,url,tag}, null, null, null, null); if(cursor.moveToFirst()) return true; //row exists else return false; } 

Editar: Código ahora copiar y pegar listo

Hay una forma muy graciosa (imho) de hacerlo a nivel de base de datos. Agregue esto a su tabla de creación sql cuando cree su base de datos:

  UNIQUE(TITLE, URL) ON CONFLICT REPLACE 

A continuación, puede insertar todo lo que quiera sin comprobar, se agregará o actualizará si la fila ya está allí.

Puede consultar para ver si existe un identificador único en la base de datos, en su caso el título quizás el identificador único de la fila.

 public boolean isEntry(int title){ String queryString = "SELECT * FROM "+TABLE_NAME+" WHERE "+KEY_PROJECT_ID+" = "+"'"+project_id+"'"; Cursor c = db.rawQuery(queryString, null); if(c.getCount() > 0){ Log.i("CHECK", "true"); return true; } else{ return false; } } 

Aquí la true significaría que hay una fila como esta, false significaría que no hay tal entrada.

Ahora digamos están a punto de insertar una entrada en la base de datos. Incluso si el método devuelve un valor true , lo que puede hacer es comparar los otros dos valores como en su ejemplo. Después de eso, podría llamar a una función para devolver una sola fila de la base de datos, como

 public String getCursor(int project_id){ String queryString = "SELECT * FROM "+TABLE_NAME+" WHERE "+KEY_PROJECT_ID+" = "+"'"+project_id+"'"; Cursor cursor = db.rawQuery(queryString, null); return cursor; } 

Una vez que tenga la función puede seleccionar la TAG y la URL de ella y ver si coincide con la de su base de datos.

Me gusta esto:

 Cursor cursor = db.rawQuery(queryString, null); String tag = ""; String url = ""; cursor.moveToFirst(); for (int i = 0; i < cursor.getCount(); i++) { like_state = cursor.getString(cursor.getColumnIndex(KEY_TAG)); url = cursor.getString(cursor.getColumnIndex(KEY_URL)); cursor.moveToNext(); } cursor.close(); if(!ins_tag.equalsIgnoreCase(tag) || !ins_url.equalsIgnoreCase(url)) { //insert function here } 

Y como se menciona en los comentarios, debe utilizar el entero AUTOINCREAMENT como clave primaria.

  • Se abren varias bases de datos de Android
  • ¿Cómo empezar con SQLCipher para Android?
  • ¿Es posible utilizar Google App Engine como base de datos backend para aplicaciones de Android?
  • Eliminación automática de objetos anidados en ORMLite
  • Cursor SQLLiteDataBase de Android que devuelve 0 filas
  • Cómo sincronizar datos entre la aplicación android y el servidor php?
  • Copias de seguridad de bases de datos de Android
  • ¿Cómo puedo repetir el último comando sql ejecutado en la línea de comandos sqlite?
  • Cómo recuperar datos de la base de datos sqlite en android y mostrarla en TextView
  • Consulta de suma en sqlite en android
  • Android: ¿Qué tan segura es la base de datos con la aplicación
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.