MoneyManagerEx 数据库(.mmb)深度解析:SQLite 结构、QIF 导入导出与 GnuCash 迁移完全指南
2026/8/25 17:55:36 网站建设 项目流程

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-ex

MoneyManagerEx 的数据库就是一个.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)、TRANSAMOUNTTRANSDATESTATUS
ACCOUNTLIST_V1账户列表ACCOUNTTYPE(现金/支票/信用卡等)、INITIALBAL
CATEGORY_V1收支分类(支持父子层级)CATEGNAMEPARENTID,内置 Bills、Food 等示例分类
PAYEE_V1收付对象PAYEENAME、默认分类
SPLITTRANSACTIONS_V1拆分交易(一笔支出记多个分类)TRANSIDSPLITTRANSAMOUNT
BILLSDEPOSITS_V1定时/循环交易(账单提醒)REPEATSNEXTOCCURRENCEDATE
BUDGETTABLE_V1/BUDGETYEAR_V1预算PERIODAMOUNT
CURRENCYFORMATS_V1货币格式,内置 168 种货币(含 BTC)CURRENCY_SYMBOLBASECONVRATE
STOCK_V1/ASSETS_V1股票与固定资产NUMSHARESASSETTYPE
TAG_V1/TAGLINK_V1标签及其关联TAGNAMEREFTYPE
INFOTABLE_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 导入导出:数据带走的"通用语言"

QIF(Quicken 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 的三条路径

  1. 直接打开 .mmb(推荐):GnuCash 内置 MoneyManagerEx 导入器,导入时选择"从 Money Manager Ex (.mmb) 导入",账户、分类、交易一次到位;
  2. QIF 中转:在 MoneyManagerEx 中导出 QIF,再用 GnuCash 的"导入 QIF"功能导入,兼容性最稳妥;
  3. 整库备份移交:直接把 .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_V1CATEGORY_V1这些核心表,你就掌握了 90% 的数据语义;而 QIF 作为通用中转格式,让 MoneyManagerEx 与 GnuCash 之间的迁移变得毫无门槛。数据在你手中,记账才真正安心。

更多细节可参考项目文档:docs/usermanual/database.mddocs/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),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询