使用包装器时,语句不会在sqlite3中提交

时间:2010-04-26 05:38:14

标签: iphone objective-c sqlite wrapper

[sqlite executeQuery:@"UPDATE UserAccess SET Answer ='Positano';"];
NSArray *query2 = [sqlite executeQuery:@"SELECT Answer FROM UserAccess;"]; 
NSDictionary *dict = [query2 objectAtIndex:0]; 
NSString *itemValue = [dict objectForKey:@"Answer"]; 
NSLog(@"%@",itemValue);

此时打印波西塔诺。 但是,当我只是再次打印没有更新查询。我得到了巴黎的旧条目。 我试过[sqlite commit]; 这也行不通。 即使我创建了一个简单的表,它第一次执行然后当我点击创建按钮它表示该表已经存在但是当我再次重新运行时它再次创建表而不是给我一个表已经存在的错误。 / p>

我做错了什么??? 我正在使用http://th30z.netsons.org/2008/11/objective-c-sqlite-wrapper/ 包装。

问候, 新手

2 个答案:

答案 0 :(得分:2)

看起来你没有提交交易。

在文件Sqlite.m中,有beginTransaction和commit方法。或者您可以尝试将数据库设置为自动提交模式。

答案 1 :(得分:0)

-(void)createEditableCopyOfDatabaseIfNeeded 
{
    // Testing for existence
    BOOL success;
    NSFileManager *fileManager = [NSFileManager defaultManager];
    NSError *error;
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    NSString *writableDBPath = [documentsDirectory stringByAppendingPathComponent:@"MyDatabase.sqlite"];
    success = [fileManager fileExistsAtPath:writableDBPath];
    if (success) return;
    // The writable database does not exist, so copy the default to the appropriate location.
    NSString *defaultDBPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"MyDatabase.sqlite"];
    success = [fileManager copyItemAtPath:defaultDBPath toPath:writableDBPath error:&error];
    if(!success)
    {
        NSAssert1(0,@"Failed to create writable database file with Message : '%@'.",[error localizedDescription]);
    }
}

在xxxxAppdelegate.m

这就是解决方案