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.
- Multi claves primarias en Android SQLite
- ¿Cómo puedo reiniciar la ID de incremento automático desde 1 en una base de datos SQLite de Android
- INSERT de SQLite de SQL
- Base de datos SQLite en android y java
- ¿Cómo agregar y utilizar la extensión de carga de Sqlite en android?
Su ayuda apreciada!
Saludos
Vivek Ragunathan
- Autocompletar de Android con SQLite LIKE funciona parcialmente
- Instrucciones de inserción múltiple android sqlite
- Cómo guardar la matriz de bytes (byte ) en la tabla SQLite?
- SQLite incapaz de abrir el archivo de base de datos (código 14) en la consulta "SELECT" frecuente
- Falta de tabla en SQLite con la versión específica de HTC DESIRE HD
- Almacenamiento en caché de los datos descargados de JSON en la base de datos SQLite - ¿es una buena idea?
- ¿Puedo descargar un db de SQLite en / sdcard y acceder desde mi aplicación Android?
- La base de datos no se copia correctamente en OnePlus Two
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
- Tabla de actualización de Android sqlite siempre devuelve 0
- Tratando de dibujar en un mapa de bits cargado por el usuario