2011-11-08 23 views
19

I intentado suprimir una columna utilizando la siguiente¿Cómo elimino la columna de la tabla sqlite en android?

openDB.execSQL("ALTER TABLE favs" + " DROP COLUMN favsCount"); 

LogCat da el siguiente mensaje:

11-07 21: 18: 29.238: ERROR/base de datos (13952): Si no 1 (cerca "DROP": error de sintaxis) en 0x34e550 al preparar 'ALTER TABLE favs DROP COLUMN favsCount'.

¿No es posible eliminar campos en sqlite para Android?

Respuesta

42

Lo sentimos, SQLite doesn't support DROP COLUMN:

(11) ¿Cómo puedo añadir o eliminar columnas de una tabla existente en SQLite.

SQLite tiene una compatibilidad ALTER TABLE limitada que puede usar para agregar una columna al final de una tabla o para cambiar el nombre de una tabla. [...]

Por ejemplo, supongamos que tiene una tabla llamada "t1" con los nombres de columnas "a", "b" y "c" y que desea eliminar la columna "c" de esta tabla. Los pasos siguientes ilustran cómo esto se podría hacer:

BEGIN TRANSACTION; 
CREATE TEMPORARY TABLE t1_backup(a,b); 
INSERT INTO t1_backup SELECT a,b FROM t1; 
DROP TABLE t1; 
CREATE TABLE t1(a,b); 
INSERT INTO t1 SELECT a,b FROM t1_backup; 
DROP TABLE t1_backup; 
COMMIT; 

Así que, básicamente, tiene que utilizar la "copia, eliminar la tabla, crear una nueva tabla, copiar de nuevo" técnica para eliminar una columna.

+0

Tenga cuidado con la "BEGIN TRANSACTION;" y "COMPROMISO" porque pueden bloquear la base de datos, ya que una transacción ya se ha iniciado en 'SQLiteOpenHelper.getWritableDatabase()'. – EmmanuelMess

+0

@muistooshort, ¿qué tan válido es el comentario de EmmanuelMess? – Suragch

+0

@Suragch Compruebe la documentación de 'SQLiteOpenHelper.getWritableDatabase()' (suponiendo que eso es lo que está usando, por supuesto). Ese pequeño ejemplo de SQL se cita de la documentación de SQLite por cierto. –

4

como mu es demasiado corto dice que Sqlite no permite hacer una tabla alternativa para eliminar una columna. aquí puede ver el alter syntax definition

Cuestiones relacionadas