我有一个我一直在研究的flex/air应用程序,它使用在初始应用程序启动时创建的本地sqlite数据库.
我已经为应用程序添加了一些功能,在这个过程中我必须向其中一个数据库表添加一个新字段.我的问题是如何让应用程序创建一个位于已存在的表中的新字段?
这是创建表的行
stmt.text = "CREATE TABLE IF NOT EXISTS tbl_status ("+"status_id INTEGER PRIMARY KEY AUTOINCREMENT,"+" status_status TEXT)";
现在我想添加一个status_default字段.
谢谢!
谢谢 - MPelletier
我添加了你提供的代码,它确实添加了字段,但是现在下次我重启我的应用程序时出现错误 - 'status_default'已经存在'.
那么我怎样才能在你提供的那一行中添加一些IF NOT EXISTS语句呢?
ALTER TABLE tbl_status ADD COLUMN status_default TEXT;
http://www.sqlite.org/lang_altertable.html
话虽这么说,在SQLite中添加列是有限的.您无法在表格的最后一列之后的任何位置添加列.
至于检查列是否已存在,PRAGMA table_info(tbl_status);
将返回一个表,列出表的各个列.
添加在:
我一直在使用数据库设计策略,这使我可以区分需要哪些修改.为此,您需要一个新表(调用它DBInfo
),一个字段(整数,调用它SchemaVersion
).或者,在SQLite中还有一个内部值user_version
,可以使用PRAGMA
命令设置.您的代码可以在程序启动时检查模式版本号并相应地应用更改,一次一个版本.
假设一个名为的函数UpdateDBSchema()
.此函数将检查您的数据库模式版本,处理DBInfo不存在,并确定数据库是否为版本0.此函数的其余部分可能只是一个具有不同版本的大型交换机,嵌套在循环中(或其他可用结构)到您选择的平台).
因此,对于第一个版本,有一个UpgradeDBVersion0To1()
函数,它将创建这个新表(DBInfo
),添加您的status_default
字段,并设置SchemaVersion
为1.在您的代码中,添加一个指示最新模式版本的常量,比如说LATEST_DB_VERSION
,并将其设置为1.这样,您的代码和数据库都有一个模式版本,并且您知道如果它们不相等则需要同步它们.
当您需要对模式进行另一次更改时,将LATEST_DB_VERSION
常量设置为2并创建一个UpgradeDBVersion1To2()
将执行所需更改的新函数.
这样,您的程序可以轻松移植,可以连接和升级旧数据库等.