JavascriptProva

lunedì 22 febbraio 2016

Catch SQLiteConstraintException.

Ho scoperto finalmente come impedire l'interruzione del programma quando si verifichi il tentativo di un reinserimento nel database in un campo UNIQUE.
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): paperino
Praticamente, 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