sql >> Base de Datos >  >> RDS >> SQLite

¿Cuándo se ejecuta SQLiteOpenHelper onCreate() / onUpgrade()?

SQLiteOpenHelper onCreate() y onUpgrade() las devoluciones de llamada se invocan cuando la base de datos está realmente abierta, por ejemplo, mediante una llamada a getWritableDatabase() . La base de datos no se abre cuando se crea el propio objeto auxiliar de la base de datos.

SQLiteOpenHelper versiona los archivos de la base de datos. El número de versión es el int argumento pasado al constructor. En el archivo de la base de datos, el número de versión se almacena en PRAGMA user_version .

onCreate() solo se ejecuta cuando el archivo de la base de datos no existe y se acaba de crear. Si onCreate() devuelve con éxito (no arroja una excepción), se supone que la base de datos se creó con el número de versión solicitado. Como implicación, no debe capturar SQLException s en onCreate() usted mismo.

onUpgrade() solo se llama cuando el archivo de la base de datos existe pero el número de versión almacenado es menor que el solicitado en el constructor. El onUpgrade() debe actualizar el esquema de la tabla a la versión solicitada.

Al cambiar el esquema de la tabla en el código (onCreate() ), debe asegurarse de que la base de datos esté actualizada. Dos enfoques principales:

  1. Elimine el archivo de la base de datos anterior para que onCreate() se vuelve a ejecutar. A menudo, esto se prefiere en el momento del desarrollo, donde tiene control sobre las versiones instaladas y la pérdida de datos no es un problema. Algunas formas de eliminar el archivo de la base de datos:

    • Desinstalar la aplicación. Use el administrador de aplicaciones o adb uninstall your.package.name del caparazón.

    • Borrar datos de la aplicación. Utilice el administrador de aplicaciones.

  2. Incremente la versión de la base de datos para que onUpgrade() es invocado. Esto es un poco más complicado ya que se necesita más código.

    • Para las actualizaciones del esquema de tiempo de desarrollo donde la pérdida de datos no es un problema, puede usar execSQL("DROP TABLE IF EXISTS <tablename>") para eliminar las tablas existentes y llamar a onCreate() para recrear la base de datos.

    • Para las versiones publicadas, debe implementar la migración de datos en onUpgrade() para que tus usuarios no pierdan sus datos.