gpt4 book ai didi

iphone - 是什么导致在 SQLite 中创建日志文件?

转载 作者:IT王子 更新时间:2023-10-29 06:17:32 28 4
gpt4 key购买 nike

我开始注意到我的 iPhone 应用程序的 SQLite 查询有一个奇怪的行为。每当我执行“INSERT”语句时,都会在我的数据库文件旁边创建一个日志文件(确切的文件名是“userdata.db-journal”)。

如果我对文档的理解正确,这个日志文件被 SQLite 使用,以便在操作失败时能够回滚。但操作完成后文件仍保留在那里。

我执行准备、绑定(bind)和执行查询的经典步骤(为简单起见,不检查返回值):

sqlite3 *db = NULL;
sqlite3_open( "userdata.db", &db );

sqlite3_stmt *insertStmt = NULL;
const char *query = "INSERT INTO table VALUES(?,?)";
sqlite3_prepare_v2( db, query, -1, &insertStmt, NULL );

sqlite3_bind_int( insertStmt, 1, 0 );
sqlite3_bind_int( insertStmt, 2, 0 );

sqlite3_step( insertStmt );

sqlite3_reset( insertStmt );
sqlite3_clear_bindings( insertStmt );

sqlite3_close( db );

日志文件是在调用“sqlite3_step”函数后创建的,并一直保留到我关闭数据库。我需要做什么才能让它消失?

最佳答案

默认情况下,SQLite 在事务开始时创建日志文件,这是一件好事。通常它会在提交时删除文件。

您可以通过 PRAGMA sql 命令更改此行为以简单地截断文件(无需创建/删除)或将其归零。您的 SQLite 版本可能不支持所有选项。

PRAGMA journal_mode = DELETE | TRUNCATE | PERSIST | MEMORY | OFF  

写入操作通常在您提交之前不会完成,这是通过截断、删除或使日志无效来实现的。

如果这种行为是新的,我无法解释为什么它可能会发生变化,除了可能是 SQLite 的升级改变了默认行为,或者通过不为每个事务重新打开日志而变得更加复杂。

关于iphone - 是什么导致在 SQLite 中创建日志文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/633274/

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