Ios SQLite3库例程调用顺序错误
下面的代码为我提供了一个名为out-of-sequence error的库例程,但我无法解释问题出在哪里。有什么想法吗Ios SQLite3库例程调用顺序错误,ios,objective-c,sqlite,Ios,Objective C,Sqlite,下面的代码为我提供了一个名为out-of-sequence error的库例程,但我无法解释问题出在哪里。有什么想法吗 - (BOOL)insertProduct:(Product *)product inOrder:(Order *)order withAmount:(int)amount { BOOL ok = NO; sqlite3_stmt *statement; const char *dbpath = [_databasePa
- (BOOL)insertProduct:(Product *)product inOrder:(Order *)order withAmount:(int)amount
{
BOOL ok = NO;
sqlite3_stmt *statement;
const char *dbpath = [_databasePath UTF8String];
if (sqlite3_open(dbpath, &_database) == SQLITE_OK)
{
NSString * insertSQL;
int amount = [self getAmountForProduct:product inOrder:order];
NSLog(@"%i", amount);
if (amount != -1)
{
insertSQL = [NSString stringWithFormat: @"UPDATE ARTICOLIPERORDINE SET quantita = %i WHERE ordine = %i AND articolo = '%@'", amount, order.idOrdine, product.codice];
}
else
{
insertSQL = [NSString stringWithFormat: @"INSERT INTO ARTICOLIPERORDINE (ordine, articolo, quantita) VALUES(%i, '%@', %i)",order.idOrdine, product.codice, 1];
}
NSLog(@"%@", insertSQL);
const char *insert_stmt = [insertSQL UTF8String];
if (sqlite3_prepare_v2(_database, insert_stmt, -1, &statement, NULL) == SQLITE_OK)
{
if (sqlite3_step(statement) == SQLITE_DONE)
{
ok = YES;
}
else
{
ok = NO;
NSLog(@"sqlite3 ERROR %s: %@",sqlite3_errmsg(_database), insertSQL);
}
sqlite3_finalize(statement);
sqlite3_close(_database);
}
else
{
NSLog(@"Error prepare = %s", sqlite3_errmsg(_database));
}
}
return ok;
}
log print Error prepare=library例程被无序调用我有一种方法。
在此之前,请确保已完成所有sql查询,如连接打开、关闭、完成等
在将查询实际运行到代码中之前,在任何数据库浏览器中执行该查询,您将看到查询中缺少的内容
在我的例子中,我错误地将列名放在查询中并运行代码,结果多次出现错误。我仔细检查了所有代码,并在数据库浏览器中执行查询,发现了我的错误。调用
sqlite3\u prepare\u v2
的返回值是多少?一个BOOL。。。问题更新实际上,sqlite3\u prepare\u v2
根据文档在成功时返回SQLITE\u OK
,因此如果运行上述代码,它肯定会失败。首先,调用失败时的步骤(SQLITE\u OK
为0),然后,在准备好的语句中调用sqlite3\u finalize
;应在准备呼叫下方关闭。除此之外,如果您能提供您试图执行的sql语句,可能是您没有逃逸sql。