2012-04-13 14 views
5

He subido una aplicación en la tienda de aplicaciones (versión 1.0). Mi aplicación está usando una base de datos sqlite para almacenar algunos datos. Ahora, he realizado algunos cambios en la base de datos (he agregado 2 o 3 columnas nuevas en una de las tablas en mi db). Quiero actualizar la versión anterior de mi aplicación con la nueva versión 1.1 (que tiene una estructura de db diferente). Ahora, cuando los usuarios que ya están utilizando la versión 1.0 actualizan la aplicación a la versión 1.1, el archivo db ya está presente en la zona de pruebas de la aplicación y, por lo tanto, la aplicación apunta a la versión 1.1, pero mi base de datos sigue siendo la anterior. Quiero tener el nuevo db con los datos antiguos, si hay alguno. Por favor, ayúdame. Gracias.Actualización de la nueva versión a la tienda de aplicaciones con una estructura sqlite db diferente

+0

Compruebe mi respuesta aquí: http://stackoverflow.com/a/9851554/108574 para la estrategia de actualización de la base de datos. –

+0

@HeShiming Gracias amigo. Pero ya he cargado la versión 1.0 en la tienda de aplicaciones y no tiene una tabla de metadatos (para almacenar la versión de la base de datos, como sugirió). Ahora, quiero subir una nueva versión y hay un cambio en la estructura de db. Entonces, ¿cómo puedo lograrlo ahora? – anshul

+0

bien, el método aún es válido. Solo necesita verificar la existencia de la tabla de metadatos al verificar el valor de retorno de una declaración de selección. Entonces, si no existe, crea uno. –

Respuesta

12

sqlite admite algo llamado como propiedad de versión de usuario, puede ejecutar PRAGMA user_version para consultar la versión de esquema actual de su aplicación db. Esta consulta puede realizarse al principio cuando se inicia la aplicación.

para actualizar esta versión de usuario ejecutar siguiendo la consulta de actualización PRAGMA user_version = version_num;

Cada vez que cree sqlite db, es una buena práctica poner esta propiedad user_version, para que cuando esté actualizando en el futuro pueda consultar el valor actual. Compruebe lo que debe ser y ejecute las modificaciones restantes o cree tablas para actualizar su versión de esquema.

Por ejemplo:

En primer lanzamiento creo tabla1 con col1, col2

I Ejecutar SQL para crear tabla1 y una vez que se realiza con éxito, ejecuto user_version pragma = 1. modo, se quiere indicar mi versión actual esquema es 1

En futuras versiones añado la nueva col3, tengo que cambiar mi versión de esquema a 2

primera vez user_version consulta, comprobar su valor y si es 1, entonces usted necesita para ejecutar alterar secuencia de comandos para agregar nueva columna y establecer la versión de usuario a 2.

En su caso, dado que no ha configurado la versión de usuario antes, sería difícil diferenciar una instalación nueva frente a una situación de actualización. Por lo tanto, por ahora puede suponer que si db está presente, es un escenario de actualización y ejecutar scripts alternos y, si no está presente, suponga que es un nuevo escenario de instalación y ejecute create scripts. Pero mira si puedes usar el pragma anterior para resolver tu problema al menos en el futuro.

+0

parece ser una buena forma de actualizar y mantener el esquema de la base de datos, lo intentaré con insistencia. –

-1

Puede comprobar en el inicio si es el antiguo db, y si es así tener una rutina para crear un nuevo db con la nueva estructura (con un nombre temporal), copie todos los datos del antiguo al nuevo, cierre el db antiguo & elimínelo, cierre el nuevo archivo db, cámbiele el nombre y, a continuación, ábralo de nuevo para que lo use su aplicación actualizada. Fácil, rápido, & no necesita un conocimiento profundo de SQLite para hacerlo.

+0

Pero quiero hacer esto solo cuando el usuario se haya actualizado de 1.0 a 1.1. El enfoque que está diciendo se implementará en el método appDidFinishLaunching en el delegado de aplicaciones y, por lo tanto, estas líneas de código se ejecutarán cada vez que inicie mi aplicación. ¿¿¿Derecha??? Entonces, necesito algo como el número de versión de la base de datos sqlite. – anshul

+0

No es así, solo necesita comprobar si el DB es la nueva estructura o no – SomaMan

Cuestiones relacionadas