当前位置:  开发笔记 > 前端 > 正文

添加列到sqlite db如果不是EXISTS - flex/air sqlite?

如何解决《添加列到sqlitedb如果不是EXISTS-flex/airsqlite?》经验,为你挑选了1个好方法。

我有一个我一直在研究的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语句呢?



1> MPelletier..:
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()将执行所需更改的新函数.

这样,您的程序可以轻松移植,可以连接和升级旧数据库等.

推荐阅读
小白也坚强_177
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有