1

我正在使用 firefox sqlite manager 来帮助我构建一个 iphone 应用程序。我在其中包含了一个 UPDATE 查询,它在 iPhone 模拟器中完美运行。但是,当我从真机(iphone)运行时它会失败。没有错误,它只是不更新​​数据库。

我在考虑两个可能的原因:1)它更新的数据库不是模拟器中的那个 2)我读取的数据库不是更新的那个

有没有人有类似的经历?

代码如下:

        NSFileManager *fileMgr = [NSFileManager defaultManager];
        NSString *dbPath = [[[NSBundle mainBundle] resourcePath ]stringByAppendingPathComponent:@"Exercises.sqlite"];

        BOOL success = [fileMgr fileExistsAtPath:dbPath];
        if(!success)
        {
            NSLog(@"Cannot locate database file '%@'.", dbPath);
        }
        if(!(sqlite3_open([dbPath UTF8String], &db) == SQLITE_OK))
        {
            NSLog(@"An error has occured.");
        }

        NSString *ranID = [@"UPDATE Status SET money = " stringByAppendingFormat:@"%d", money + 100];

        const char *sql2 = [ranID UTF8String];
        sqlite3_stmt *sqlStatement2;
        if(sqlite3_prepare(db, sql2, -1, &sqlStatement2, NULL) != SQLITE_OK)
        {
            NSLog(@"Problem with prepare statement 2");
        }
        if (sqlite3_step(sqlStatement2)==SQLITE_ROW) 
            NSLog(@"succeed");

提前致谢。

4

3 回答 3

0

发生的事情是您尝试在捆绑包中的数据库中写入,您没有对捆绑包中文件的写入权限,如果您想更新数据库,则需要将其复制到 Documents 目录

复制数据库文件

NSString *documentsPath = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/Exercises.sqlite"];

[[NSFileManager defaultManager] copyItemAtPath:dbPath toPath:documentsPath error:NULL];

然后总是使用新的文件路径 ( documentsPath) 来访问数据库

于 2012-06-30T18:16:13.447 回答
0

应用程序包中的文件在设备上是只读的。

您应该首先将其复制到应用程序沙箱中的某个位置,例如在您的库/应用程序支持目录中。(您可以使用 - [NSFileManager URLsForDirectory:inDomains:] 和 NSApplicationSupportDirectory 来查找此路径;请务必在尝试写入之前创建目录。)

于 2012-06-30T18:16:39.337 回答
0

这听起来像是您没有提交我们的更改。在此处此处查看类似的帖子

于 2012-06-30T18:17:15.280 回答