2011-12-07 11 views
5

Tworzę prostą bazę danych w systemie Android. Chcę dodać nową tabelę po tym, jak mój kod został wykonany jeden raz. Teraz, gdy próbuję zmienić moją metodę onCreate() w klasie EventDataSqlHelper, moja aplikacja ulega awarii.Dodawanie nowej tabeli do bazy danych po wykonaniu aplikacji raz

Jest tak prawdopodobnie dlatego, że onCreate() powiązane z SQLiteOpenHelper jest wykonywane tylko wtedy, gdy aplikacja jest uruchomiona i nie możemy wprowadzać w niej dalszych modyfikacji.

Próbowałem również napisać osobną funkcję dodawania nowej tabeli. To działało idealnie przy pierwszym uruchomieniu. Ale ponieważ na drugim etapie będzie nadpisywać poprzednią bazę danych, dlatego powoduje awarię aplikacji.

Czy istnieje sposób dodania nowych tabel do bazy danych, jeśli baza danych została już utworzona?

package org.example.sqldemo; 
import android.content.Context; 
import android.database.sqlite.SQLiteDatabase; 
import android.database.sqlite.SQLiteOpenHelper; 
import android.provider.BaseColumns; 
import android.util.Log; 

/** Helper to the database, manages versions and creation */ 
public class EventDataSQLHelper extends SQLiteOpenHelper { 

    private static final String DATABASE_NAME = "events.db"; 
    private static final int DATABASE_VERSION = 1; 

    // Table name 
    public static final String TABLE = "events"; 

    // Columns 
    public static final String TIME = "time"; 
    public static final String TITLE = "title"; 

    public EventDataSQLHelper(Context context) { 
     super(context, DATABASE_NAME, null, DATABASE_VERSION); 
    } 

    @Override 
    public void onCreate(SQLiteDatabase db) { 
     String sql = "create table " + TABLE + "(" + BaseColumns._ID 
       + " integer primary key autoincrement, " + TIME + " integer, " 
       + TITLE + " text not null);"; 
     Log.d("EventsData", "onCreate: " + sql); 
     db.execSQL(sql); 
    } 

    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 


    } 


} 

Odpowiedz

8

Do tego służą urządzenia onUpgrade i DATABASE_VERSION.

Przykład:

  • masz tabelę events i jest wykonywany na telefon.
  • Teraz decydujesz, chcesz nowy stół users.

    1. zmiana DATABASE_VERSION = 2; (jest to numer wersji)
    2. w onCreate(), stworzyć wszystkie tabele (create table events & create table users)
    3. w onUpgrade(), stworzyć wszystkie tabele, które zmieniły pomiędzy wersją OldVersion i Newversion (create table users)
  • Później, jeśli chcesz dodać nowe tabele, przyrost DATABASE_VERSION ponownie i stworzyć wszystkie tabele w onCreate, a zmiany w onUpgrade

2

Można użyć CREATE TABLE IF NOT EXISTS TABLENAME ... w zapytaniu, że nie zastąpi istniejącą tabelę.

Powiązane problemy