2012-12-14 4 views

Antwort

24

Sie sollten eine einzige SQLiteOpenHelper-Klasse für alle Tabellen haben. Überprüfen Sie this Verbindung.

+0

ok, danke, kennen Sie den Nebeneffekt des für jedes mit Tabelle? Oder soll nur eine einzige Datei bearbeitet werden? –

+1

Überprüfen Sie die bearbeitete Antwort –

+1

Danke das ist ziemlich erklärend, ich werde so bald wie möglich lesen! : D: D –

4

Nur um einen anderen Ansatz:

Sie können jederzeit auf der onOpen(..) Methode overried hat es Ihre onCreate(..) genannt. Achten Sie darauf, die "CREATE TABLE IF NOT EXISTS..." Anweisung zu verwenden, anstatt "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); 
} 

Sie tun das mit jeder Klasse, die von SQLiteOpenHelper erstreckt

1

@TheReader richtig ist. Ich bevorzuge einen einzigen SQLiteOpenHelper für alle Tabellen, hier ist was ich tue: Übergeben Sie eine Liste von "Tabellenerstellung" sqls an den Konstruktor der SQLiteOpenHelper-Unterklasse, dann in der OnCreate-Funktion die Liste durchlaufen, um jede Tabelle zu erstellen. so meine SQLiteOpenHelper Unterklasse etw wie folgt aussieht:

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); 
     } 
    } 

Aber das kommt ein weiteres Problem: Nach einer neuen Tabelle hinzufügen und mit einem bestehenden alten installierte die neue Version der App installieren, die neue Tabelle wird nicht erstellt werden, weil das Vorhandensein der alten Datenbank verhindert, dass die onCreate-Funktion aufgerufen wird. Daher muss der Nutzer zuerst die App deinstallieren und die App vollständig installieren. Die Database_Version hilft, es android scheint nicht die onCreate Funktion ausführen , wenn und nur wenn die eine existin Datenbank mit dem gleichen Namen und der gleichen Database_Version

Verwandte Themen