一、前言
二、需求
方法一:使用sqlitemanager创建数据库和表,并将创建好的数据库文件拖入项目中,最后调用以下代码将数据库复制到documents目录;
/**
* 将数据库文件复制进沙盒
*/
-(void)createeditablecopyofdatabaseifneeded
{
// 先判断 sandbox 下面的 documents 子文件夹里面有没有数据库文件 test.sqlite
nsfilemanager *filemanager = [nsfilemanager defaultmanager];
nserror *error;
nsarray *paths = nssearchpathfordirectoriesindomains(nsdocumentdirectory, nsuserdomainmask, yes);
nsstring *documentsdirectory = [paths objectatindex:0];
nsstring *writabledbpath = [documentsdirectory stringbyappendingpathcomponent:@"test.sqlite"];
bool iffind = [filemanager fileexistsatpath:writabledbpath];
if (iffind)
// nslog(@"数据库已存在");
return;
}
else{
nslog(@"数据库不存在,需要复制");
// 如果不存在数据库文件,则复制数据库文件
nsstring *defaultdbpath = [[nsbundle mainbundle] pathforresource:@"test" oftype:@"sqlite"];
bool ifsuccess = [filemanager copyitematpath:defaultdbpath topath:writabledbpath error:&error];
if (!ifsuccess) {
nslog(@"failed to create writable database file with message '%@'.", [error localizeddescription]);
}else {
nslog(@"createeditablecopyofdatabaseifneeded 初始化成功");
方法二:利用开源的fmdb库代码创建数据库;
* 代码创建数据库
- (void)createdatabaseifneeded
// 数据库路径
nsstring *doc = [paths objectatindex:0];
nsstring *path = [doc stringbyappendingpathcomponent:@"test.sqlite"];
nsfilemanager * filemanager = [nsfilemanager defaultmanager];
if ([filemanager fileexistsatpath:path] == no) {
// create it
fmdatabase * db = [fmdatabase databasewithpath:path];
if ([db open]) {
// 建立user表
nsmutablestring *sql = [nsmutablestring stringwithformat:@"%@",@"create table user"];
[sql appendstring:@"("];
[sql appendstring:@"username varchar,"];
[sql appendstring:@"password varchar"];
[sql appendstring:@")"];
bool res = [db executeupdate:sql];
if (!res) {
debuglog(@"error when creating table user");
} else {
debuglog(@"succ to creating table user");
[db close];
else {
debuglog(@"error when open db");
注:fmdb库使用教程http://blog.devtang.com/blog/2012/04/22/use-fmdb/
三、总结
1、第一种方法创建数据库在需求变动的情况下(如增加几张表)容错率稍高,推荐使用第一种方法;
2、两种方法均是先判断数据库是否存在然后再决定要不要创建/复制数据库。在一种特殊情况下-应用更新版本,其实原来的数据库文件是会从老的版本中拷贝到新版本中(参考:http://blog.csdn.net/zyx586/article/details/18989199),所以更新版本后数据库文件是不会做任何改变的,就算你在新的版本中完全改变数据库的结构。所以如果存在数据库变动的需要在应用版本升级后重新创建一个全新的数据库并备份旧的数据;
最新内容请见作者的github页:http://qaseven.github.io/