2011-12-07 24 views
5

Estoy haciendo una base de datos simple en Android. Quiero agregar una nueva tabla después de que mi código se haya ejecutado una vez. Ahora, cada vez que intento cambiar mi método onCreate() en la clase EventDataSqlHelper, mi aplicación falla.Agregar una nueva tabla a la base de datos después de que la aplicación se haya ejecutado una vez

Esto es probablemente porque onCreate() asociado con SQLiteOpenHelper se ejecuta solo cuando la aplicación se ejecuta por primera vez y no podemos hacer modificaciones adicionales en ella.

También intenté escribir una función separada para agregar una nueva tabla. Funcionó perfectamente en la primera ejecución. Pero desde la segunda aplicación, sobrescribirá su base de datos anterior, por lo que hace que la aplicación se bloquee.

¿Hay alguna manera de agregar tablas nuevas a la base de datos si la base de datos ya se ha creado?

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


    } 


} 

Respuesta

8

Esto es lo que onUpgrade y es para.

Ejemplo:

  • tiene una tabla events, y se ejecuta en el teléfono.
  • Ahora usted decide, quiere una nueva tabla users.

    1. cambio DATABASE_VERSION = 2; (esta es su número de versión)
    2. en onCreate(), crear todas las tablas (create table events & create table users)
    3. en onUpgrade(), crear todas las tablas que han cambiado entre la versión OldVersion y newVersion (create table users)
  • adelante si desea añadir nuevas tablas, incrementar DATABASE_VERSION de nuevo, y crear todas las tablas de onCreate, y los cambios en onUpgrade

2

Usted podría utilizar CREATE TABLE IF NOT EXISTS TABLENAME ... como la consulta, que no sobrescribir la tabla existente.

Cuestiones relacionadas