当前位置:  开发笔记 > 数据库 > 正文

是什么原因导致在SQLite中创建日志文件?

如何解决《是什么原因导致在SQLite中创建日志文件?》经验,为你挑选了1个好方法。

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

如果我正确理解了文档,那么SQLite将使用此日志文件在操作失败时能够回滚.但是操作完成后文件仍保留在那里.

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

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'函数后创建的,并保持不变直到关闭数据库.我需要做些什么才能让它消失?



1> Joe Koberg..:

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

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

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

写操作通常直到您执行COMMIT才能完成,这是通过截断,删除或使日志无效来实现的.

如果这种行为是新的,我没有解释为什么它可能已经改变,除了可能是SQLite的升级改变了默认行为,或者因为没有为每个事务重新打开日志而变得更加复杂.

推荐阅读
mobiledu2402851373
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有