热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

因未捕获的异常导致崩溃后SQLite日志文件行为

我正在一个涉及SQLite的项目中,我只有一个数据库文件,现在我正在测试我的应

我正在一个涉及SQLite的项目中,我只有一个数据库文件,现在我正在测试我的应用程序在断电或应用程序崩溃的情况下的行为。
我已成功测试了电源中断情况下日志文件的回滚,但是我正在为应用程序崩溃(例如由于未捕获的异常)而导致的SQLite行为苦苦挣扎。

让我们假设这种情况(真实数据库上的操作比单个插入要复杂得多,这就是为什么我要显式使用事务的原因):

sqlite3_exec(db,"BEGIN;",nullptr,nullptr);
/* other code (may be select,delete,update on the db or something not related to the db) */
sqlite3_exec(db,"INSERT INTO mytable(myvalue) VALUES(10);",nullptr);
throw "exception"; /* something throws an exception here */
sqlite3_exec(db,"COMMIT;",nullptr);

上面的代码结果是我在磁盘上还有一个日记文件。我的期望是,崩溃后我一开始与数据库建立连接,就会自动读取日志文件并执行回滚。

我实际上注意到的是,直到我开始另一笔交易之前,日志文件才被触摸,然后独立于此新交易(提交或回滚)的结果,我在上述代码中抛出之前所做的更改将自动回滚。这是预期的行为吗?也许是因为日志文件不是热门新闻文件,因为在回滚或提交期间没有发生崩溃?

编辑:可能我找到了这种现象的原因。默认情况下,SQLite中的自动提交模式是启用的,并且仅在手动启动事务时才禁用,然后在手动事务完成(提交或回滚)后再次启用。如果在事务开始之后但事务结束之前发生崩溃或断电,则将禁用自动提交,并且当再次打开数据库时,自动提交仍将被禁用,因此除非处理了日志,否则将不会处理日志文件新事务已启动和完成(通过回滚或提交)。如果在执行提交或回滚时发生崩溃或断电,则不会发生这种情况,因为在那一刻,再次启用了自动提交功能,因此新的时间SQLite将自动进行回滚。





推荐阅读
  • 本文深入探讨 MyBatis 中动态 SQL 的使用方法,包括 if/where、trim 自定义字符串截取规则、choose 分支选择、封装查询和修改条件的 where/set 标签、批量处理的 foreach 标签以及内置参数和 bind 的用法。 ... [详细]
  • 本文介绍了如何通过 Maven 依赖引入 SQLiteJDBC 和 HikariCP 包,从而在 Java 应用中高效地连接和操作 SQLite 数据库。文章提供了详细的代码示例,并解释了每个步骤的实现细节。 ... [详细]
  • 通过Web界面管理Linux日志的解决方案
    本指南介绍了一种利用rsyslog、MariaDB和LogAnalyzer搭建集中式日志管理平台的方法,使用户可以通过Web界面查看和分析Linux系统的日志记录。此方案不仅适用于服务器环境,还提供了详细的步骤来确保系统的稳定性和安全性。 ... [详细]
  • 在Android Studio中查看SQLite数据库
    原来查看数据库内容,我们一般都是将数据库文件从手机导出,再用专门的软件打开查看,比较繁琐。最近发现了一个比较方便的方法:使用工具stetho。使用方式在gradle中配置depen ... [详细]
  • 本文详细介绍如何使用Python进行配置文件的读写操作,涵盖常见的配置文件格式(如INI、JSON、TOML和YAML),并提供具体的代码示例。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • andr ... [详细]
  • Hadoop入门与核心组件详解
    本文详细介绍了Hadoop的基础知识及其核心组件,包括HDFS、MapReduce和YARN。通过本文,读者可以全面了解Hadoop的生态系统及应用场景。 ... [详细]
  • 本文由瀚高PG实验室撰写,详细介绍了如何在PostgreSQL中创建、管理和删除模式。文章涵盖了创建模式的基本命令、public模式的特性、权限设置以及通过角色对象简化操作的方法。 ... [详细]
  • 本文探讨了领域驱动设计(DDD)的核心概念、应用场景及其实现方式,详细介绍了其在企业级软件开发中的优势和挑战。通过对比事务脚本与领域模型,展示了DDD如何提升系统的可维护性和扩展性。 ... [详细]
  • 深入解析Redis内存对象模型
    本文详细介绍了Redis内存对象模型的关键知识点,包括内存统计、内存分配、数据存储细节及优化策略。通过实际案例和专业分析,帮助读者全面理解Redis内存管理机制。 ... [详细]
  • Netflix利用Druid实现高效实时数据分析
    本文探讨了全球领先的在线娱乐公司Netflix如何通过采用Apache Druid,实现了高效的数据采集、处理和实时分析,从而显著提升了用户体验和业务决策的准确性。文章详细介绍了Netflix在系统架构、数据摄取、管理和查询方面的实践,并展示了Druid在大规模数据处理中的卓越性能。 ... [详细]
  • SQLite3是一个广泛使用的数据库,从linux,windows到安卓都有SQLite的应用。本文介绍SQLite3在windows上的编译。SQLite3提供了多种源代码的下载 ... [详细]
  • 有没有人用过sqlite?关于tablehasnocolumnnamedcolumn插入数据的时候报上边的错。问题是我明明有这一列。直接在sqlitedevoloper里执 ... [详细]
  • IhaveonedoubtinSqlite.dteTimeDataTypeisVarchar(200)inTablestructure.Iwanttogetresult ... [详细]
author-avatar
烟熏装-_265
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有