iPad SQLite3无法通过INSERT查询

时间:2011-12-29 18:01:27

标签: ios ipad sqlite permissions

我目前正在尝试在iPad上的SQLite3数据库中插入一个新行。我之前在其他应用程序中已经多次完成它并且只是复制了代码。复制的SELECT查询工作正常,但如果我尝试INSERT,则会在== SQLITE_DONE

失败

这是我尝试插入数据库的方式:

NSString *databaseName = @"Waypoints.sql";
NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDir = [documentPaths objectAtIndex:0];
NSString *databasePath = [documentsDir stringByAppendingPathComponent:databaseName];
sqlite3 *database;
if(sqlite3_open([databasePath UTF8String], &database) == SQLITE_OK)
{
    NSString *statement = [NSString stringWithFormat:
                           @"INSERT INTO Waypoints (id, name, alt, ias, temp, tas, wd, ws, gs, mt, mh, dist, time, fuel, fuelrate) VALUES (%d,'New...','','','','','','','','','','','','','');", [self numberOfWaypoints]];
    NSLog(@"Statement: %@", statement);
    const char *sqlStatement = [statement cStringUsingEncoding:NSASCIIStringEncoding];
    sqlite3_stmt *compiledStatement;
    if(sqlite3_prepare_v2(database, sqlStatement, -1, &compiledStatement, NULL) == SQLITE_OK)
    {
        if(sqlite3_step(compiledStatement) == SQLITE_DONE)
            NSLog(@"DATABASE: Adding: Success");
        else
            NSLog(@"DATABASE: Adding: Failed");
    }
    else
        NSLog(@"Error. Could not add Waypoint.");
    sqlite3_finalize(compiledStatement);
}
sqlite3_close(database);

如果我按下按钮运行此代码,它会在控制台中输出DATABASE: Adding: Failed

NSLogged语句如下所示:

  

INSERT INTO Waypoints(id,name,alt,ias,temp,tas,wd,ws,gs,mt,mh,dist,time,fuel,fuelrate)VALUES(2,'New ...','' , '', '', '', '', '', '', '', '', '', '', '', '');

如果我将它粘贴到终端(连接到同一个数据库文件),那么它可以正常工作。

这让我得出结论:可能导致这个问题的原因是什么? 我想到了对文件的写权限。可能是它,但它不在捆绑中,但已经复制到设备上的文档文件夹中。

请帮助我如何让它工作?

2 个答案:

答案 0 :(得分:2)

尝试使用NSUTF8StringEncoding进行 cStringUsingEncoding 或打印

NSLog(@"%@", [NSString stringWithUTF8String:(char*)sqlite3_errmsg(database)]);

很高兴看到你能找到你的错误。

答案 1 :(得分:0)

通过使用NSLog(@"%@", [NSString stringWithUTF8String:(char*)sqlite3_errmsg(database)]);打印错误来关注@IgnacioInglese的提示,我发现数据库已被锁定。

我发现在关闭数据库之前通过返回方法中的值来创建新手错误。修复解决了我的问题。