- singleton, extiende de SQLiteOpenHelper - tiene su objeto y una SqLiteDatabase - usa un atomicInteger para contar la apertura - constructor privado: super(MyApp.getContext(), .DATABASE_NAME, null, .DATABASE_VERSION) - recuerda que MyApp hay que ponerla de name en el manifest - getInstance con un new si es null - override on open, si !db.isReeadOnly() activamos fk: db.execSQL("PRAGMA foreign_keys=ON") - un open y un close database, ambos synchronized - si cont.incrementAndGet() == 1, la abrimos db=getWritableDatabase() - si cont.decrementAndGet() == 0, la cerramos db.close - el open la devuelve, el close no hace nada - overrides de onCreate y onUpgrade - onCreate try catch de los db.execSQL(contact.sqlCreate), tambien de los inserts - onUpgrade try catch de los db.execSQL(delete) y luego llamamos a onCreate