Solución:
ALTER TABLE tbl_status ADD COLUMN status_default TEXT;
http://www.sqlite.org/lang_altertable.html
Dicho esto, agregar columnas en SQLite es limitado. No puede agregar una columna en ningún lugar que no sea después de la última columna de su tabla.
En cuanto a comprobar si la columna ya existe, PRAGMA table_info(tbl_status);
devolverá una tabla que enumera las diversas columnas de su tabla.
AÑADIR:
He estado usando una estrategia en el diseño de bases de datos que me permite distinguir qué modificaciones son necesarias. Para esto, necesitará una nueva tabla (llámela DBInfo
), con un campo (Integer, llámalo SchemaVersion
). Alternativamente, también hay un valor interno en SQLite llamado user_version
, que se puede configurar con un PRAGMA
mando. Su código puede, al iniciar el programa, verificar el número de versión del esquema y aplicar los cambios correspondientes, una versión a la vez.
Suponga una función llamada UpdateDBSchema()
. Esta función verificará la versión del esquema de su base de datos, manejará que DBInfo no esté allí y determinará que la base de datos está en la versión 0. El resto de esta función podría ser solo un interruptor grande con diferentes versiones, anidado en un bucle (u otra estructura disponible a la plataforma que elija).
Entonces, para esta primera versión, tenga un UpgradeDBVersion0To1()
función, que creará esta nueva tabla (DBInfo
), Agrega tu status_default
campo y establecer SchemaVersion
a 1. En su código, agregue una constante que indique la última versión del esquema, digamos LATEST_DB_VERSION
y configúrelo en 1. De esa manera, su código y su base de datos tienen una versión de esquema, y sabe que debe sincronizarlos si no son iguales.
Cuando necesite realizar otro cambio en su esquema, establezca el LATEST_DB_VERSION
constante a 2 y hacer un nuevo UpgradeDBVersion1To2()
función que realizará los cambios necesarios.
De esa manera, su programa se puede portar fácilmente, puede conectarse y actualizar una base de datos antigua, etc.
Sé que esta es una vieja pregunta … sin embargo.
He encontrado este problema preciso en la implementación de SQLite en Adobe AIR. Pensé que sería posible usar el comando PRAGMA para resolver, pero dado que la implementación de adobe air no es compatible con el comando PRAGMA, necesitamos una alternativa.
Lo que hice, que pensé que valdría la pena compartir aquí, es esto:
var sql:SQLStatement = new SQLStatement();
sql.sqlConnection = pp_db.dbConn;
sql.text = "SELECT NewField FROM TheTable";
sql.addEventListener(SQLEvent.RESULT, function(evt:SQLEvent):void {
});
sql.addEventListener(SQLErrorEvent.ERROR, function(err:SQLErrorEvent):void {
var sql:SQLStatement = new SQLStatement();
sql.sqlConnection = pp_db.dbConn;
sql.text = "ALTER TABLE TheTable ADD COLUMN NewField NUMERIC;";
sql.execute();
sql.addEventListener(SQLEvent.RESULT, function (evt:SQLEvent):void {
});
});
sql.execute();
Espero que ayude a alguien.