Dificultad para actualizar la tabla SQlite
Tengo una aplicación en ejecución con una mesa de trabajo llamada ANIMAL. Al crear esta tabla por primera vez, consistía simplemente en las columnas _id y animal_name.
Ahora estoy tratando de ampliarlo, incluyendo una columna de biografía animal, sin embargo estoy teniendo un poco de dificultad. Al principio pensé que era sólo un caso de actualizar mi declaración CREATE_TABLE para incluir la bio animal:
- Prácticas recomendadas para bases de datos de Android
- Cómo probar si el cursor está vacío en una consulta SQLiteDatabase
- OnUpgrade () base de datos sqlite en Android
- ¿Es la operación costosa de SQLite cursor.getCount en Android
- SQlite Database: No se puede encontrar el contexto
private static final String DATABASE_CREATE = "create table " + ANIMALS_TABLE + " (_id integer primary key autoincrement, " + "animal_name text not null, " + "biography text not null);";
Sin embargo, mirando el logcat me dice que la biografía de la columna no existe cuando se intenta insertar en ella.
Ahora, he intentado actualizar la base de datos usando el onUpgrade()
e incluyendo el código
db.execSQL("ALTER TABLE" + DATABASE_NAME); db.execSQL(DATABASE_CREATE);
Pero esto no es resolver el problema tampoco. ¿Alguien tiene alguna sugerencia sobre cómo solucionar este problema?
- Android - El archivo de base de datos Sqlite no se elimina mientras se desinstala una aplicación?
- El incremento automático de SQLite no funciona
- Android: niveles de aislamiento de transacciones SQLite (ORMLite)
- Eliminar fila de SQLite con cláusula where con cláusulas múltiples
- PhoneGap / Apache Cordova propone una API para la base de datos cifrada SQLite
- Java.lang.OutOfMemoryError en almacenar imágenes en sqlite db
- android sqlite crea índice con la cláusula where falla
- AsyncTask de Android y instancia de SQLite DB
Si está utilizando SQLiteOpenHelper
es fácil actualizar una tabla. Es necesario implementar los métodos onCreate
y onUpgrade
y proporcionar la versión actual de su base de datos en el constructor de la clase. Al actualizar su tabla simplemente incremente el número de la versión de la base de datos, especifique una nueva consulta de creación de tablas en el método onCreate
y ponga ALTER TABLE
al método onUpgrade
para actualizar la versión anterior de la tabla. Cuando Android detecta desajuste de la versión de la base de datos, llamará onUpgrade
método onUpgrade
automáticamente. Vea el ejemplo:
public class OpenHelper extends SQLiteOpenHelper { private final static int DB_VERSION = 2; public TracksDB(Context context) { super(context, DB_NAME, null, DB_VERSION); } @Override public void onCreate(SQLiteDatabase db) { final String CREATE_TBL = "create table " + ANIMALS_TABLE + " (_id integer primary key autoincrement, " + "animal_name text not null, " + "biography text not null);"; db.execSQL(CREATE_TBL); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { if (oldVersion < 2) { final String ALTER_TBL = "ALTER TABLE " + ANIMALS_TABLE + " ADD COLUMN biography text not null;"; db.execSQL(ALTER_TBL); } } }
Este método de actualización es la forma correcta de modificar las tablas sin perder datos de usuario, especialmente si la aplicación ya se había liberado al público.
- ExpandableListFragment con LoaderManager para el paquete de compatibilidad
- ¿Por qué falla mi prueba de unidad relacionada con JSONObject?