Android, manejar SQLiteConstraintException

Tengo este método en Android:

public void insertarTitulo(String _id, String title, String url){ ContentValues cv = new ContentValues(); cv.put("_id", _id); cv.put("title", title); cv.put("URL", url); try{ getWritableDatabase().insert("book", "book", cv); }catch(SQLiteConstraintException e){ Log.e(MyActivity.LOGTAG, "This code doesn't show"); } close(); } 

El valor del título es único por lo que cuando inserto un valor duplicado me arroja el error de restricción, hasta ahora eso es correcto. Todo funciona como se esperaba. Pero no puedo hacer que el código de captura funcione.

Intente usar insertOrThrow . De lo contrario, insert devuelve -1 en caso de error.

Cuando se ejecuta para agregar los valores en la base de datos de la clase de entrada add boolean para controlar los datos ex:

  boolean DBAccepted = DBhelper.addData(blabla); if(DBAccepted ==false) { Toast.maketext (this,"There is a conflict",Toast.LengthLong ).show(); } 

En la clase DBhelper:

 public boolean addData(String blablabla){ DBAccepted =true; ContentValues cv = new ContentValues(); cv.put(key_value, blablabla); Databes.insertOrThrow(TABLE_SCORES, null, cv); } catch (SQLiteConstraintException e) { // TODO Auto-generated catch block System.out.println(e); DBAccepted =false; } return DBAccepted ; } 

La base de datos aquí intentará agregar los valores si los valores pasaron sin conflicto o error el boolean seguirá siendo verdadero si el error el boolean será falso y lo devolverá y usted puede brindar cualquier mensaje como ex tostada (hay un conflicto)

Lo siento, pero las respuestas mencionadas anteriormente no funcionan para mí en Android 4.4.2. Min sdk nivel 11, máximo 21.

Lo que funcionó para mí fue el siguiente:

 /*FIRST INSERT A VALUE*/ database = //get a writable database instance String MESSAGES_TABLE = "messages"; ContentValues cv= new ContentValues(); cv.put("unique_id_column","unique_id"); database.insert(MESSAGES_TABLE,null,cv); database.close(); /*NOW LETS TRY TO INSERT ANOTHER RECORD, WITH THE SAME VALUE, WHERE UNIQUE_ID_COLUMN IS THE UNIQUE COLUMN DEFINED WHILE CREATING THE TABLE.*/ database == //get a writable database instance try{ long new_row_id = database.insertWithOnConflict(MESSAGES_TABLE, null,cv,SQLiteDatabase.CONFLICT_FAIL); Log.d(SS_DATABASE_TAG,"the new row id is ---> " + String.valueOf(new_row_id)); } catch(SQLiteConstraintException e) { Log.d(SS_DATABASE_TAG,"caught the contraint."); } database.close(); 

Esto captura correctamente la restricción, y usted puede hacer su manejo dentro del bloque catch.

RR.

  • ¿Cómo combinar datos de dos tablas separadas en un solo Cursor?
  • Cómo agregar fecha en la base de datos sqlite
  • Esquema de la base de datos de Android Sqlite
  • Android: Ampliación del libro de contactos del usuario. Rendimiento ContentProvider vs Sqlite vs Lista en la memoria
  • ¿Cómo obtener contactos en orden de sus próximos cumpleaños?
  • Android - BaseColumns y _id
  • cláusula multiple where en android
  • ¿Cómo puedo ver el contenido de un sqlite db de mi aplicación en un dispositivo real?
  • Actualizar la base de datos local de Android
  • ¿Qué es más rápido: almacenar datos en una lista o en una base de datos? (Androide)
  • Custom SimpleCursorAdapter, consulta de base de datos y NullPointerException
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.