2011-12-07 12 views
5

Sto creando un semplice database in Android. Voglio aggiungere una nuova tabella dopo che il mio codice è stato eseguito una volta. Ora, ogni volta che provo a cambiare il mio metodo onCreate() nella classe EventDataSqlHelper, la mia app si arresta in modo anomalo.Aggiunta di una nuova tabella al database dopo che l'app è stata eseguita una volta

Ciò è probabilmente dovuto al fatto che onCreate() associato a SQLiteOpenHelper viene eseguito solo quando l'app viene eseguita per la prima volta e non è possibile apportare ulteriori modifiche al suo interno.

Ho anche provato a scrivere una funzione separata per l'aggiunta di una nuova tabella. Ha funzionato perfettamente alla prima esecuzione. Ma dal momento che alla 2 ° edizione sovrascriverà il suo database precedente, quindi provoca l'arresto anomalo dell'app.

C'è un modo per aggiungere nuove tabelle al database se il database è già stato creato?

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) { 


    } 


} 

risposta

8

Questo è ciò che onUpgrade e DATABASE_VERSION è per.

Esempio:

  • Hai un tavolo events, e viene eseguito sul telefono.
  • Ora si decide, si desidera una nuova tabella users.

    1. cambiamento DATABASE_VERSION = 2; (questo è il numero di versione)
    2. in onCreate(), creare tutte le tabelle (create table events & create table users)
    3. in onUpgrade(), creare tutte le tabelle che ha cambiato tra la versione oldVersion e newVersion (create table users)
  • in seguito, se si desidera aggiungere nuove tabelle, incrementare DATABASE_VERSION di nuovo, e di creare tutte le tabelle in onCreate, e cambiamenti nella onUpgrade

2

Si potrebbe usare come CREATE TABLE IF NOT EXISTS TABLENAME ... la tua ricerca, che non sovrascrivere il tabella esistente.

Problemi correlati