我目前正试图简单地插入一个新行到我的iPad上的SQLite3数据库。我在其他应用程序中多次完成了它,并且复制了代码。复制的SELECT
查询做工精细,但如果我尝试INSERT
,它在== SQLITE_DONE
iPad的SQLite3失败INSERT查询
失败,这是我尝试插入到数据库:
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航点(ID,姓名,ALT,IAS,温度,TAS,WD,WS,GS,MT,MH,距离,时间,燃料,fuelrate )VALUES(2,'New ...','','','','','','','','','','','','','' );
如果我将它粘贴到终端(连接到同一个数据库文件),那么它可以很好地工作。
这使我得出结论:什么可能导致这个问题?
我想也许写文件的权限。可能是这样,但它不在包中,但已经复制到设备上的文档文件夹中。
请问我能如何让这个工作?
你有没有尝试过使用NSUTF8StringEncoding为你的cStringUsingEncoding? – 2011-12-29 19:25:36
...或打印NSLog(@“%@”,[NSString stringWithUTF8String:(char *)sqlite3_errmsg(database)]);.也许这可能会指向你正确的方向 – 2011-12-29 19:28:03
@IgnacioInglese,谢谢你的errmsg提示!它说'数据库被锁定了吗?Anytips?哦,请将您的意见转换成答案 – LouwHopley 2011-12-29 20:27:27