2011-11-07 9 views
10

Tengo este método en Android:Android, manejar SQLiteConstraintException

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

} 

título valor es único por lo que al insertar un valor duplicado me lanza el error de restricción, hasta ahora eso es correcto. Todo funciona como se esperaba. pero no puedo hacer que funcione el código catch.

Respuesta

23

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

+0

eso fue todo. tx – butelo

+0

no vale nada que todavía arroja una excepción en caso de error –

+0

phew .. gracias .. –

1

Cuando se ejecuta a sumar los valores de la base de datos de la clase de entrada añadir booleano para controlar los datos ejemplo:

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 que aquí se intente agregar los valores si los valores pasaron sin conflicto o error el booleano permanecerá verdadero si el error booleano será falso y lo devolverá y podrá brindar cualquier mensaje como ex tostado (hay un conflicto)

0

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 la 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 llama correctamente la restricción, y que puede hacer que su manejo dentro del bloque catch.

RR.

Cuestiones relacionadas