深度解析:SQLite 结构、QIF 导入导出与 GnuCash 迁移完全指南)
MoneyManagerEx 数据库(.mmb)深度解析SQLite 结构、QIF 导入导出与 GnuCash 迁移完全指南【免费下载链接】android-money-manager-exLocal-first personal finance app. Encrypted, self-hosted, sync across devices.项目地址: https://gitcode.com/gh_mirrors/an/android-money-manager-exMoneyManagerEx 的数据库就是一个.mmb 文件——本质上是一个本地优先Local-first的 SQLite 数据库支持 SQLCipher 加密可跨设备同步、无需云端。本文带你彻底搞懂 .mmb 的 SQLite 表结构、QIF 导入导出机制以及如何把财务数据迁移到 GnuCash是个人理财数据安全落袋的完整指南。一、.mmb 文件到底是什么很多人担心数据存哪儿了会不会丢。答案很简单你的所有账目都保存在一个普通的 SQLite 文件里。特性说明文件格式SQLite 数据库单文件默认文件名data.mmb定义于app/src/main/java/com/money/manager/ex/Constants.java存放位置手机内部存储的MoneyManagerEx目录方便备份和脚本访问加密版本带密码时生成.emb文件采用 SQLCipher 加密小知识从 5.x 版本起MoneyManagerEx 支持给数据库加密码。加密后的文件扩展名为.emb每次打开都需要输入密码文件被拷走也无法直接读取。创建数据库的流程很简单首次运行时会引导你选择新建或打开已有数据库二、SQLite 表结构速览数据都躺在哪些表里打开 .mmb 文件你会发现约 20 张以_V1结尾的表。核心表的职责如下完整建表脚本见app/src/main/res/raw/tables_v1.sql表名作用关键字段CHECKINGACCOUNT_V1⭐ 交易流水最核心TRANSCODE(Withdrawal/Deposit/Transfer)、TRANSAMOUNT、TRANSDATE、STATUSACCOUNTLIST_V1账户列表ACCOUNTTYPE(现金/支票/信用卡等)、INITIALBALCATEGORY_V1收支分类支持父子层级CATEGNAME、PARENTID内置 Bills、Food 等示例分类PAYEE_V1收付对象PAYEENAME、默认分类SPLITTRANSACTIONS_V1拆分交易一笔支出记多个分类TRANSID、SPLITTRANSAMOUNTBILLSDEPOSITS_V1定时/循环交易账单提醒REPEATS、NEXTOCCURRENCEDATEBUDGETTABLE_V1/BUDGETYEAR_V1预算PERIOD、AMOUNTCURRENCYFORMATS_V1货币格式内置 168 种货币含 BTCCURRENCY_SYMBOL、BASECONVRATESTOCK_V1/ASSETS_V1股票与固定资产NUMSHARES、ASSETTYPETAG_V1/TAGLINK_V1标签及其关联TAGNAME、REFTYPEINFOTABLE_V1元信息键值表存放DATAVERSION等设计亮点分类表用PARENTID实现两级分类交易表通过CATEGID关联分类、PAYEEID关联收付对象配合SPLITTRANSACTIONS_V1实现一笔多分类——这就是 QIF 里S/$拆分记录的来源。三、数据库版本与自动升级机制.mmb 文件并非一成不变。项目用 21 个迁移脚本app/src/main/res/raw/database_version_0.sql~database_version_21.sql记录每个版本的表结构变更。数据库助手类app/src/main/java/com/money/manager/ex/database/MmxOpenHelper.java定义了支持的版本范围当前为 20~21并在onUpgrade()中按顺序执行增量升级——所以旧版 .mmb 文件打开时会自动迁移到新结构你无需手动操作。四、QIF 导入导出数据带走的通用语言QIFQuicken Interchange Format是个人记账界的交换标准GnuCash、Quicken、YNAB 都认识它。MoneyManagerEx 在app/src/main/java/com/money/manager/ex/servicelayer/qif/目录下实现了完整的 QIF 导出QifExport.java导出入口生成2026-08-24_081900.qif这类带时间戳的文件QifHeader.java/QifRecord.java分别生成文件头与逐条交易记录一条 QIF 交易记录的字段非常直白每行字母内容D08/24/26 ← D日期MM/dd/yy 格式 T-58.50 ← T金额支出为负 PR ← C对账状态R 已核对 P超市 ← P收付对象 L食物/生鲜 ← L分类转账则写 [目标账户名] M周末采购 ← M备注 ^ ← 记录结束符拆分交易还会追加 S(分类)/$(金额) 行 使用场景从旧记账 App 导出 .qif或想换用 GnuCash 时先导出 QIF 再导入即可分类和拆分交易都能保留。五、迁移到 GnuCash 的三条路径直接打开 .mmb推荐GnuCash 内置 MoneyManagerEx 导入器导入时选择从 Money Manager Ex (.mmb) 导入账户、分类、交易一次到位QIF 中转在 MoneyManagerEx 中导出 QIF再用 GnuCash 的导入 QIF功能导入兼容性最稳妥整库备份移交直接把 .mmb 文件复制到桌面端使用文件即数据不锁定在任何 App 里。无论走哪条路先做一次完整备份最保险六、备份与数据安全清单 ✅️ 定期用 App 内置的导出数据库功能生成.mmb备份默认文件名your_export_db.mmb见app/src/main/java/com/money/manager/ex/settings/DatabaseSettingsFragment.java 敏感数据建议启用密码保护生成.emb加密文件☁️ 备份文件放到自己的网盘/设备中Local-first 架构意味着数据主权完全在你手里 收支数据可在报表中随时核对确认无误后再迁移写在最后.mmb 的本质是一个你能随时拿走的 SQLite 文件 可选的 SQLCipher 加密。理解了CHECKINGACCOUNT_V1、CATEGORY_V1这些核心表你就掌握了 90% 的数据语义而 QIF 作为通用中转格式让 MoneyManagerEx 与 GnuCash 之间的迁移变得毫无门槛。数据在你手中记账才真正安心。更多细节可参考项目文档docs/usermanual/database.md、docs/usermanual/backup-restore.md。【免费下载链接】android-money-manager-exLocal-first personal finance app. Encrypted, self-hosted, sync across devices.项目地址: https://gitcode.com/gh_mirrors/an/android-money-manager-ex创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考