2012-12-14 3 views

risposta

24

È necessario disporre di una singola classe SQLiteOpenHelper per tutte le tabelle. Controllare il collegamento this.

+0

ok, grazie, si fa a sapere l'effetto collaterale di avere uno per ogni tavolo? O è solo per avere un singolo file da modificare? –

+1

Controlla la risposta modificata –

+1

grazie questo è abbastanza esplicativo, leggerò al più presto! : D: D –

4

Solo per il gusto di un approccio diverso:

Puoi sempre overried sul metodo onOpen(..) ce l'ha chiamato il tuo onCreate(..). Assicurarsi di utilizzare l'istruzione "CREATE TABLE IF NOT EXISTS..." piuttosto che "CREATE TABLE"

@Override 
public void onOpen(SQLiteDatabase db) { 
    onCreate(db); 
} 

@Override 
public void onCreate(SQLiteDatabase db) { 
    String CREATE_FRIENDS_TABLE = "CREATE TABLE IF NOT EXISTS ..."; 
    db.execSQL(CREATE_FRIENDS_TABLE); 
} 

di farlo con ogni classe che si estende dal SQLiteOpenHelper

1

@TheReader è giusto. Preferisco un singolo SQLiteOpenHelper per tutte le tabelle, ecco cosa faccio: passare un elenco di sql di "creazione tabella" al Costruttore della sottoclasse SQLiteOpenHelper, quindi nella funzione onCreate iterare l'elenco per creare ogni tabella. quindi il mio SQLiteOpenHelper sottoclasse sembra sth come questo:

public ModelReaderDbHelper(Context context, List<String> createSQLs, List<String> deleteSQLs){ 
     super(context, DATABASE_NAME, null, DATABASE_VERSION); 
     this.TABLE_CREATION_SQLS = createSQLs; 
     this.TABLE_DELETE_SQLS = deleteSQLs; 
    } 
    @Override 
    public void onCreate(SQLiteDatabase sqLiteDatabase) { 
     for(String oneCreation : TABLE_CREATION_SQLS){ 
      sqLiteDatabase.execSQL(oneCreation); 
     } 
    } 

Ma che arriva un altro problema: dopo aver aggiunto una nuova tabella, e installare la nuova versione della app con un vecchio già installata, la nuova tabella non lo farà essere creato, poiché l'esistenza del vecchio database impedirà il richiamo della funzione onCreate. Quindi l'utente deve prima disinstallare l'app e installare completamente l'app. Il Database_Version aiuta, sembra Android non si eseguire la funzione onCreate se e solo se l'un database existin con lo stesso nome e lo stesso Database_Version