我目前正在尝试在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语句如下所示:
插入Waypoints(id,name,alt,ias,temp,tas,wd,ws,gs,mt,mh,dist,time,fuel,fuelrate)值(2,'New ...','','' ,'','','','','','','','','','','');
如果我将其粘贴到终端中(连接到相同的数据库文件),则效果很好。
这使我得出结论:什么可能导致此问题?
我想到了对该文件的写权限。可能是这样,但是它不在捆绑包中,而是已经复制到设备上的documents文件夹中。
请帮助我如何使它工作?
最佳答案
尝试将NSUTF8StringEncoding用于 cStringUsingEncoding 或打印
NSLog(@"%@", [NSString stringWithUTF8String:(char*)sqlite3_errmsg(database)]);
很高兴看到您可以找到您的错误。