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

Android O(API26/27)出现SQLiteException:找不到APPS_MODEL表

解决Android O(API26/27)中SQLite表不存在的致命异常

你在把应用从API25升级到Android O后遇到的SQLiteException: no such table: APPS_MODEL错误,大概率是数据库创建/升级逻辑在Android O的新规则下出现了问题,我整理了几个针对性的排查和解决方向:

1. 确认APPS_MODEL表在onCreate中正确创建

先检查你的SQLiteOpenHelper子类的onCreate方法,确保创建表的SQL语句没有拼写错误,并且用CREATE TABLE IF NOT EXISTS避免重复创建的冲突:

@Override
public void onCreate(SQLiteDatabase db) {
    // 注意表名、字段名要和查询语句里的完全一致
    String createAppsModelTable = "CREATE TABLE IF NOT EXISTS APPS_MODEL (" +
            "_id INTEGER PRIMARY KEY AUTOINCREMENT," +
            "ACTIVITY_INFO_NAME TEXT," +
            "PACKAGE_NAME TEXT," +
            "FOLDER_ID INTEGER)";
    db.execSQL(createAppsModelTable);
    // 如果还有其他表的创建语句,也要确保没有语法错误——某张表创建失败会导致整个onCreate终止
}

2. 检查数据库版本号是否正确更新

如果APPS_MODEL是升级API时新增的表,一定要把SQLiteOpenHelper构造函数里的数据库版本号调高(比如从1改成2),这样系统才会触发onUpgrade方法来执行表的创建逻辑:

// 构造函数中把版本号从旧值改为新值
public MyDbHelper(Context context) {
    super(context, "MyAppDatabase.db", null, 2); // 版本号从1升级到2
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    // 针对旧版本数据库做迁移
    if (oldVersion < 2) {
        // 新增APPS_MODEL表
        db.execSQL("CREATE TABLE IF NOT EXISTS APPS_MODEL (...);");
    }
}

3. 排查Android O下的数据库路径与权限问题

Android O开始对应用数据目录的权限管控更严格,如果你的代码自定义了数据库存储路径,可能会导致数据库文件无法创建,进而表不存在:

  • 避免硬编码路径,用context.getDatabasePath("MyAppDatabase.db")获取系统默认的合法路径;
  • 如果是多进程应用,注意Android O已废弃MODE_MULTI_PROCESS,建议改用ContentProvider处理跨进程数据库访问,避免锁冲突或创建失败。

4. 确认onCreate是否被正常触发

如果旧版本的数据库文件已经存在,onCreate不会被执行,这时候旧数据库里没有APPS_MODEL表就会报错:

  • 用adb shell检查数据库文件是否存在:
    adb shell ls /data/data/com.transformeddev.floatingtoolbox/databases/
    
  • 如果文件存在但表缺失,必须通过onUpgrade来补建表,或者卸载旧应用后重新安装(仅测试用)。

5. 检查onCreate中的异常导致表创建失败

有时候onCreate中其他表的创建语句有语法错误,会导致整个方法执行失败,APPS_MODEL表也不会被创建。建议在onCreate中添加日志或异常捕获:

@Override
public void onCreate(SQLiteDatabase db) {
    try {
        db.execSQL(createAppsModelTable);
        db.execSQL(createOtherTableSql);
    } catch (SQLException e) {
        Log.e("DbHelper", "创建表时出错", e);
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:57:02