我已经看到了一些不同的方法,你可以利用sqlite作为你的应用程序的数据库。具体如下:
创建数据库并通过XML文件导入数据。
使用sqlite gui(sqlite数据库浏览器)
通过数据库助手类直接创建数据库。
每一个都有什么好处?我倾向于使用sqlite数据库浏览器来加载一些我的应用程序所需的表。我也会有用户输入。
您建议我为他们的输入和联合提供一个额外的表,还是允许用户输入到我提供的表中。我预见到的一个问题是应用程序的升级(通过市场),我不希望用户丢失他们输入的数据。
谢谢!
最佳答案
我做了一个选择:
将每个架构和数据填充文件存储为资源中的脚本
创建了一个包装类,它从资源中运行这些脚本
其中一个资源文件是一个众所周知的(按名称)清单,它有一个按哪个顺序运行的脚本列表。
我在数据库中有一个poperties表,它存储最后运行的脚本。
这意味着:
创建时(第一次运行)-它连续运行所有脚本
当应用程序更新时-它运行所有尚未运行的脚本。更新在资源中包含更多脚本。
脚本更新模式和修改/ MunGE现有客户数据-当然没有数据丢失。
顺便说一句,我在ios上这么做是为了在android、winphone和其他平台之间共享sqlite脚本。您只需要在运行序列的每个平台上使用包装器类。
这也意味着,如果需要,我可以从命令行运行脚本以创建数据库…
编辑:
例如,在我的示例应用程序中,update1.sql是作为资源添加的文件。它有两个sql批处理。我的包装器打开清单文件,get是要运行的脚本列表,查询数据库以查看上次运行的脚本,然后创建要运行的脚本数组。当它运行列表中的update1.sql时,我的包装类将执行该文件中作为资源嵌入的所有语句。例如,下面是我的update1.sql
alter table messages add column user text;
create table log
(
id integer primary key autoincrement,
information text
);
现在,假设创建的新表需要其中的一些数据。(在我的例子中,日志表没有)。脚本可以在create表之后包含一系列insert-into语句。
在脚本中执行多个批处理需要在prepare中使用tail参数。我有C/objective-C代码,如果你想看的话,但我还没有写Android包装器…