Avevo già incontrato in passato il problema di non riuscire a intercettare le eccezioni lanciate quando si tenti di inserire un duplicato in un campo UNIQUE, ma non ero riuscito a trovare la soluzione in rete e così ero ricorso a complicati mezzi cervellotici per ottenere questo risultato.
Adesso, invece, basta intercettare l'eccezione lanciata mediante il metodo insertOrThrow e gestirla eventualmente con un codice alternativo senza che si interrompa l'esecuzione del programma.
Ecco il codice completo:
public void salva(String nome){
SQLiteDatabase db=this.getWritableDatabase();
ContentValues values=new ContentValues();
values.put("nome", nome);
try{
db.insertOrThrow("tabella", null, values);
}catch(SQLiteConstraintException e){
Log.d("Exception", "Caught");
}
}
Ecco il risultato in LogCat:
02-22 19:25:39.944: E/SQLiteLog(12396): (2067) abort at 11 in [INSERT INTO tabella(nome) VALUES (?)]: UNIQUE constraint failed: tabella.nome 02-22 19:25:39.944: D/Exception(12396): Caught 02-22 19:25:39.944: V/LETTURA(12396): DATABASE 02-22 19:25:39.945: V/1(12396): topolino 02-22 19:25:39.945: V/2(12396): minni 02-22 19:25:39.945: V/3(12396): paperinoPraticamente, l'errore viene intercettato e viene lasciato il messaggio di avvenuta intercettazione, quindi il flusso del programma procede liberamente inserendo gli altri records nel database.
Nessun commento:
Posta un commento