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