gpt4 book ai didi

ios - Xcode Sqlite update 语句只工作一次

转载 作者:行者123 更新时间:2023-11-29 02:47:27 24 4
gpt4 key购买 nike

我有一些代码可以将门票添加到数据库中。我可以很好地添加,但是当我尝试更新数据库中的现有票证时,我只能更新一次,然后每次更新都失败。如果我重新启动应用程序,我可以再次更新一次,每次更新尝试失败后。有人可以帮我找出造成这种情况的原因吗?这是我添加/更新数据库的代码。

sqlite3_stmt    *statement;
const char *dbpath = [_databasePath UTF8String];

if (sqlite3_open(dbpath, &_ticketDB) == SQLITE_OK)
{

//first I check to see if ticket already exists
NSString *insertSQL = [NSString stringWithFormat:@"SELECT * FROM tickets WHERE ticketnum = \'%@\'", globalData.ticket];
int rc = sqlite3_prepare_v2(_ticketDB, [insertSQL UTF8String], -1, &statement, nil);
if (rc == SQLITE_OK) {
//Based on if ticket exists, I either update or insert new row
if (sqlite3_step(statement) == SQLITE_ROW) {
insertSQL = [NSString stringWithFormat:@"UPDATE tickets SET shippername = \'%@\' WHERE ticketnum = \'%@\'", globalData.shipperName, globalData.ticket];
}
else{
insertSQL = [NSString stringWithFormat:@"INSERT INTO TICKETS (ticketnum, shippername) VALUES (\"%@\", \"%@\")", globalData.ticket, globalData.shipperName];

}
}

const char *insert_stmt = [insertSQL UTF8String];
sqlite3_prepare_v2(_ticketDB, insert_stmt, -1, &statement, NULL);
if (sqlite3_step(statement) == SQLITE_DONE)
{
NSLog(@"Added/Updated");

} else {
NSLog(@"Failed to add/update ticket to db");
}
sqlite3_finalize(statement);
sqlite3_close(_ticketDB);
}

最佳答案

[来自 Googie 的评论:]

您永远不会完成您的“SELECT”语句,而是使用完全相同的变量来准备另一个语句来存储它。旧语句不会自动完成,它只会丢失在内存中,可能这就是阻止“UPDATE”语句更新此类行的原因,因为该行已被“SELECT”语句锁定。

再加一个

sqlite3_finalize(statement);

之前

sqlite3_prepare_v2(_ticketDB, insert_stmt, -1, &statement, NULL);

关于ios - Xcode Sqlite update 语句只工作一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24936202/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com