You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Studio查询SQLite第二张表提示database disk image is malformed问题

问题原因及解决方案

该报错通常由旧版数据库缓存、表写入逻辑异常两类原因导致,你可以按以下步骤排查解决:

  • 优先清除旧数据库缓存
    你当前数据库版本号固定为1,SQLiteOpenHelper的onCreate方法仅会在应用首次安装、数据库文件不存在时执行。如果之前安装过仅包含course_info表的旧版应用,后续新增note_info表后没有升级数据库版本,系统会直接复用旧的残缺数据库文件,就会出现第一张表可查、第二张表查询触发损坏报错的情况。
    操作方法:直接卸载测试设备/模拟器上的对应应用,或者进入应用设置清除全部存储数据,重新运行安装即可。这一方法可以解决90%以上的该类场景问题。
  • 检查数据写入逻辑
    确认DatabaseDataWorker类的insertSampleNotes方法是否符合表约束要求:note_info表的COLUMN_NOTE_TITLE、COLUMN_COURSE_ID字段设置了NOT NULL约束,如果插入时这两个字段传入了空值,或者插入过程中事务异常中断未正确提交,都会破坏数据库文件结构。
  • 补充数据库升级逻辑
    如果后续需要迭代表结构,不要直接修改现有版本的建表语句,而是提升DATABASE_VERSION数值,同时在onUpgrade方法中补充适配逻辑,示例如下:
    public static final int DATABASE_VERSION = 2; // 版本号+1
    
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        if(oldVersion < 2){
            // 删除旧表后重新执行创建逻辑
            db.execSQL("DROP TABLE IF EXISTS " + NoteKeeperDatabaseContract.CourseInfoEntry.TABLE_NAME);
            db.execSQL("DROP TABLE IF EXISTS " + NoteKeeperDatabaseContract.NoteInfoEntry.TABLE_NAME);
            onCreate(db);
        }
    }
    
  • 手动验证数据库文件
    可以通过Android Studio的Device File Explorer,导出路径为/data/data/[你的应用包名]/databases/NoteKeeper.db的数据库文件,用本地SQLite客户端打开,直接检查表结构是否完整、note_info表的数据是否正常写入。

内容的提问来源于stack exchange,提问作者Kingsley Onwus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 05:21:03