gpt4 book ai didi

iphone - 奇怪的SQLite行为

转载 作者:行者123 更新时间:2023-12-03 19:09:47 25 4
gpt4 key购买 nike

我将数据插入表中,而sqlite3_step返回SQLITE_DONE。但是有时表中没有新数据!即使我在添加数据后立即进行检查。

这是我的代码:

sqlite3_stmt *addTranslationStmt2 = NULL;

if(sqlite3_prepare_v2( database , "INSERT INTO translations(lang1_wordid, lang2_wordid) VALUES(?, ?)" , -1, & addTranslationStmt2, NULL) != SQLITE_OK)
{
NSLog(@"statement prepare error");
addTranslationStmt2 = NULL;
return -1;
}

sqlite3_bind_int(addTranslationStmt2, 1, word_id);
sqlite3_bind_int(addTranslationStmt2, 2, translation_id);

if(sqlite3_step(addTranslationStmt2) != SQLITE_DONE)
{
NSLog(@"addTranslationStmt2 error: '%s'", sqlite3_errmsg(database));
sqlite3_reset(addTranslationStmt2);
return -1;
}

sqlite3_reset(addTranslationStmt2);

if (![self wordHasTranslation: word_id translation_id: translation_id])
NSLog(@"And after all translation was not added even though sqlite3_step returns SQLITE_DONE!");


所以我想知道为什么最后一个提到的日志函数被调用。这意味着添加数据后,表中没有数据。有时它增加了,有时却没有。

问题可能在哪里?
先感谢您。

更新:
我发现只有在创建新数据库时才会发生这种情况。重新启动应用程序后,它以正确的方式工作。但是,如果创建了新数据库,则会返回奇怪的行为。

最佳答案

默认情况下,Sqlite确实在自动提交模式下运行,但是我们无法知道以前的某些交互或设置是否已将其重置。如果在COMMIT之后添加显式的INSERT,这有帮助吗?

编辑:可能不会,从注释中提供更多信息,但是以防万一,您确实需要在其他情况下进行提交,最简单的方法是:

char* errmsg;
int result = sqlite3_exec(database, "COMMIT", NULL, NULL, &errmsg);


以及通常的结果代码&c(使用指向错误消息的错误消息后,您需要输入 sqlite3_free(errmsg))。

关于iphone - 奇怪的SQLite行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1053185/

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