Agregar nueva tabla a la base de datos después de que la aplicación se haya ejecutado una vez

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

Esto es probablemente porque onCreate() asociado con SQLiteOpenHelper se ejecuta sólo cuando la aplicación se ejecuta por primera vez y no podemos hacer más modificaciones en él.

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

¿Hay alguna forma de agregar nuevas tablas 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) { } } 

Esto es lo que es onUpgrade y DATABASE_VERSION .

Ejemplo:

  • Usted tiene una tabla de events , y se ejecuta en el teléfono.
  • Ahora decides, quieres una nueva tabla de users .

    1. Cambiar DATABASE_VERSION = 2; (Este es su número de versión)
    2. En onCreate() , crear todas las tablas ( create table events y create table users )
    3. En onUpgrade() , cree todas las tablas que cambiaron entre la versión oldVersion y newVersion ( create table users )
  • Más tarde, si desea agregar nuevas tablas, incremente DATABASE_VERSION nuevo y cree todas las tablas en onCreate y los cambios en onUpgrade

Puede utilizar CREATE TABLE IF NOT EXISTS TABLENAME ... como su consulta, que no sobrescribiría su tabla existente.

Pregunta ya resuelta aquí, todavía principiantes que no entienden ver este enlace.

https://youtu.be/OrJTtWrEfuc

  • SQLiteException "no puede confirmar - ninguna transacción está activa" al insertar con CONFLICT_REPLACE
  • ¿Cómo puedo implementar mapas sin conexión usando osmdroid al guardar imágenes de mosaicos de mapa en la base de datos sqlite?
  • Cómo construir una consulta SQLite a GROUP by ORDER?
  • Cómo lograr lo siguiente en Realm para android
  • Sincronización entre la base de datos SQL Lite en un dispositivo android y la base de datos de SQL Server
  • Límites de la base de datos SQLite en Android
  • ¿Cómo puedo repetir el último comando sql ejecutado en la línea de comandos sqlite?
  • ¿Por qué onUpgrade () no está siendo invocado en la base de datos Android sqlite?
  • Buscar datos en la base de datos SQLite de Android
  • Evite borrar los datos de la base de datos al hacer clic en el botón "borrar datos" en la configuración de la aplicación en el dispositivo Android
  • Android: cómo consultar SQLiteDatabase con args de selección de no-cadena?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.