Necesita un buen método para cambiar (SQLite) tipo de datos de columna

Estoy teniendo una tabla con columna 'int'. Durante la actualización del software, quiero cambiarlo a un tipo de datos 'largo'. Parece SQLite no proporciona una opción (en la instrucción alter) para cambiar / modificar las propiedades de la columna. Puesto que quiero hacer una actualización, la tabla puede contener datos que el usuario no debe perder. Así que por favor me sugieren un buen método para cambiar la propiedad de tipo de datos de columna sin pérdida de datos.

Una forma sugerida en los enlaces de búsqueda es crear una tabla temporal, copiar los registros de la tabla existente, eliminar la tabla existente y cambiar el nombre de la tabla temporal. Dudo que sea eficiente.

Su ayuda apreciada!

Saludos

Vivek Ragunathan

Utilicé las instrucciones siguientes para cambiar el tipo de la columna.

CREATE TABLE IF NOT EXISTS **TEMP_TABLE** (id integer primary key autoincrement, **col2change integer not null**, ...) INSERT INTO TEMP_TABLE SELECT * FROM EXISTING_TABLE DROP TABLE EXISTING_TABLE ALTER TABLE TEMP_TABLE RENAME TO EXISTING_TABLE 

Cambié la columna del tipo del int en la tabla existente al tipo entero. Para unos cientos de filas, era razonablemente rápido.

Las columnas de SQLite3 no tienen tipos de datos, sólo afinidades : no hay ningún beneficio al cambiar el tipo de columna de int a largo.

Si un programa wrapper está truncando valores antes de darlos a SQLite3, hay una manera de solucionar esto editando el esquema. Es una operación peligrosa, por lo que debe hacerlo sólo después de realizar una copia de seguridad de la base de datos. El esquema se almacena en la tabla sqlite_master ; Normalmente es de sólo lectura, pero puede modificarlo si lo habilita con el pragma del esquema de escritura . Tenga cuidado de realizar solo cambios que no invaliden sus datos; Puede cambiar int a long int ya que ambos tienen afinidad INTEGER.

De la documentación de SQLite

No es posible cambiar el nombre de una columna, eliminar una columna, añadir o eliminar restricciones de una tabla.

Compruebe este enlace

Recuerde que los tipos de datos de columna no son rígidos en SQLite. Compruebe este enlace

Edit: Después de sus comentarios sobre otra respuesta, supongo que la opción que usted mencionó – trabajando a través de la tabla temporal – es la única, que no es eficiente fuera de curso.

Puede agregar una nueva columna, copiar los valores de la antigua a la nueva columna, eliminar la columna antigua y luego cambiar el nombre de la nueva columna al nombre antiguo

AFAIK no hay manera en Android de cambiar los tipos de datos de la columna una vez que se crea y se utiliza una tabla. La forma práctica es hacer una nueva tabla y copiar los datos que lee acerca de

  • Mantener la misma base de datos SQLite al actualizar y la aplicación de Android de la versión Lite a Pro
  • Buscar en toda la base de datos SQLite utilizando FTS3 / FTS4?
  • sqlite insertar en tabla select * from
  • ¿Cómo puedo ver el contenido de un sqlite db de mi aplicación en un dispositivo real?
  • GreenDAO no genera restricción FOREIGN KEY (...) en la tabla
  • Enfoque para rellenar la vista de lista expandible con la base de datos SQlite local
  • Android: Cómo sumar todas las columnas de una base de datos SQLite y devolver 1 variable única
  • La aplicación se bloquea si el cursor SQLite no tiene resultados
  • ¿Cómo puedo insertar una comilla doble (") en el campo Varchar de la base de datos SQLite?
  • Cómo hacer una copia de seguridad / restaurar la base de datos SQLite en Android a Dropbox
  • Instancia global de base de datos
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.