我正在使用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");
提前致谢。
答案 0 :(得分:0)
您正在尝试在捆绑包中的数据库内写入,您没有对捆绑包中文件的写入权限,如果要更新数据库,则需要将其复制到Documents目录
p>复制数据库文件
NSString *documentsPath = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/Exercises.sqlite"];
[[NSFileManager defaultManager] copyItemAtPath:dbPath toPath:documentsPath error:NULL];
然后始终使用新文件路径(documentsPath
)来访问数据库
答案 1 :(得分:0)
应用套装中的文件在设备上是只读的。
您应首先将其复制到应用程序沙箱中的某个位置,例如在“库/应用程序支持”目录中。 (您可以在NSApplicationSupportDirectory中使用 - [NSFileManager URLsForDirectory:inDomains:]来查找此路径;请确保在尝试写入目录之前创建该目录。)
答案 2 :(得分:0)