0

我正在开发一个使用 Sqlite3 数据库的应用程序。目前数据库在应用程序包中,但我知道当我在真实世界中使用真正的 iPhone 进行测试时,我会遇到更新数据的问题。

1 - 如何在捆绑阶段将我的项目数据库复制到库文件夹?

2 - 我怎样才能访问这个复制的数据库?现在我的代码是:

NSFileManager *fileMgr = [NSFileManager defaultManager];
    NSString *dbPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"myDatabase.sqlite"];
    BOOL success = [fileMgr fileExistsAtPath:dbPath];

我必须改变什么?

3 - 如果我更新应用程序,如何保留这个数据库(包含用户数据)?

提前致谢!;)

4

1 回答 1

1

您必须将数据库从 Resources 文件夹复制到 Documents 文件夹

sqlite3 *database;
BOOL success;
NSFileManager *fileManager = [NSFileManager defaultManager];
NSError *error;
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *writableDBPath = [documentsDirectory stringByAppendingPathComponent:@"Lists.db"];
success = [fileManager fileExistsAtPath:writableDBPath];
// The writable database does not exist, so copy the default to the appropriate location.
if(!success)
{
    NSString *defaultDBPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"Lists.db"];
    success = [fileManager copyItemAtPath:defaultDBPath toPath:writableDBPath error:&error];
    if (!success) {
        TFLog(@"Failed moving database... %@",[error localizedDescription]);
        return;
    }
}

当您更新 Documents 文件夹中的应用程序数据库时,您只需检查条件

     success = [fileManager fileExistsAtPath:writableDBPath];
if it does not exits new database will be copied their.
Just keep in mind database structure is same as before.
于 2012-08-22T06:19:51.903 回答