2011-06-15 18 views
6

Tengo una aplicación iOS que usa una base de datos SQLite para almacenar su modelo de datos. El usuario no puede cambiar el contenido de este DB de ninguna manera. La única forma en que cambiarán los contenidos de la base de datos es cuando agregue más contenido en futuras actualizaciones de la aplicación. (La aplicación nunca escribe contenido en la base de datos, solo lee de ella)Cómo sobrescribir una base de datos SQLite en iOS cuando se lanza una nueva versión de la aplicación

Por lo tanto, cuando realizo dicha actualización, quiero que use la versión "más nueva" de la base de datos en la nueva versión que estoy creando, y simplemente deshacerse de la antigua base de datos. ¿Cuál es la mejor manera de hacerlo? ¿Hay alguna manera sencilla de decirle que tome la nueva versión del DB cuando actualizo, o necesito programar en lógica personalizada para eso?

Respuesta

4

Vamos a discutir desde el principio de su aplicación se ha instalado por primera vez. El db sqlite será init en los pasos de flujo:

  1. Comprobar si existen las .db [nombreaplic] en la aplicación de la carpeta de instalación.

  2. Cree un archivo vacío [appname] .db en la carpeta de instalación si este archivo no existe.

  3. Cree un registro para indicar la versión actual de la aplicación y guárdela en la tabla denominada 'appversion' (esto también se puede almacenar en el archivo de preferencias).

  4. Cargar el número de versión antigua de la ubicación donde se almacenan en el paso 3, compararlo con el número de versión actual, y hay que ejecutar archivos sql serval nombradas como '[nombreaplic] _sql_v1.sql, [nombreaplic ] _sql_v2.sql, [appname] _sql_v3.sql ', tenga en cuenta que cada edición tendrá un archivo' [appname] _sql_v * .sql 'que contiene todos los cambios en el esquema de la tabla y registra los cambios. si su aplicación ha sido actualizada a la versión 7, encontrará 7 archivos sql en su paquete de aplicaciones.

  5. Supongamos que algún tipo ha instalado una aplicación versionada 2, pero no actualizó hasta que un día encontró que la versión actual es 7, y luego la actualizó a 7. Dos números de versión de código serán cargado cuando él/ella comenzó la aplicación por primera vez después de la actualización: 2 y 7, por lo que estos archivos sql: [appname] _sql_v3.sql, [appname] _sql_v4.sql, [appname] _sql_v5.sql, [appname] _sql_v6.sql, [appname] _sql_v7.sql se ejecutarán uno por uno.

acuerdo de estas cosas:

1.do no ponga declaración de inicio de SQL en el código, lo puso en un archivo sql y leerlo a SQLite db según sea necesario.

2. Cada edición será propietaria de un archivo '[appname] _sql_v * .sql' que contiene los cambios realizados en la versión anterior.

0

Si utiliza su base de datos de su paquete (supongo que lo hace, ya que su base de datos es de solo lectura), entonces automáticamente utiliza una nueva versión de DB para una actualización de la aplicación. Si copia su BD del paquete a la carpeta de documentación, simplemente vuelva a escribir su DB anterior con uno nuevo.

0

Agregue la base de datos precargada a su proyecto (a la carpeta Recursos). Esto se implementará con su aplicación, y se puede encontrar en el tiempo de ejecución en la ruta del paquete principal.

Como el usuario nunca escribirá contenido en él, solo leerá desde allí, debería poder abrirlo directamente desde allí. Puede obtener la ruta para ello utilizando:

NSString *databasePath = [[NSBundle mainBundle] pathForResource:@"ReadOnlyDatabase" ofType:@"sqlite"]; 
Cuestiones relacionadas