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

Android SQLiteException(code1)排查:应用崩溃问题求助

排查Android SQLite应用中“no such column: favourites”崩溃问题

嘿,这个错误我太熟悉了——本质就是你的SQLite表结构和代码里的查询/操作不匹配,咱们一步步拆解问题:

1. 先核对数据库表的创建语句

打开你的DBAdapter类,找到创建表的CREATE TABLE SQL语句,仔细检查:

  • 有没有明确定义favourites列?比如是不是漏写了,或者拼写错误(比如写成美式的favorite少了末尾的s)?
  • 列的定义语法有没有问题?比如是不是漏了逗号,或者类型写错?
    举个正确的示例,如果是布尔型收藏标记,创建语句应该类似:
CREATE TABLE your_table_name (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    title TEXT NOT NULL,
    favourites INTEGER DEFAULT 0 -- 这里要明确存在这个列
);

2. 检查数据库升级逻辑

如果是你后来才给表加的favourites列,那模拟器里的旧数据库文件还保留着原来的表结构,新的列不会自动生效:

  • 最简单的临时解决方法:卸载模拟器里的应用,再重新安装,这样会生成全新的数据库文件。
  • 长期正确的做法:在DBAdapter的onUpgrade方法里添加列升级逻辑,比如:
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    if (oldVersion < 2) { // 假设新增列是版本2的变更
        db.execSQL("ALTER TABLE your_table_name ADD COLUMN favourites INTEGER DEFAULT 0;");
    }
}

注意要对应修改数据库的版本号(比如把DATABASE_VERSION从1改成2),这样应用启动时会触发升级逻辑。

3. 排查代码中的查询/操作语句

检查MainScreen和DBAdapter里所有用到favourites的地方:

  • 比如SELECT语句里有没有把favourites列加入查询字段?
  • WHERE子句里有没有用到favourites = ?这类条件?
  • 有没有拼写错误?比如把favourites写成favourite或者其他变体?
    举个错误示例:如果你的查询是db.query(TABLE_NAME, new String[]{"id", "title", "favourites"}, null, null, null, null, null);,但表实际没有这个列,就会直接抛出SQLiteException。

4. 直接验证数据库实际结构

用Android Studio的Device File Explorer找到模拟器里的数据库文件:
路径一般是data/data/[你的应用包名]/databases/[你的数据库名].db
把这个文件下载到本地,用SQLite可视化工具(比如SQLiteStudio)打开,直接查看表的列结构——这是最直观的验证方式,能立刻确认favourites列是否真的存在。

5. 确认数据库初始化流程

检查DBAdapter的实例是否正确初始化,有没有在使用数据库前调用getWritableDatabase()或getReadableDatabase()——这两个方法会触发数据库的创建或升级逻辑,如果没调用,表可能根本没被创建(不过这种情况一般会报表不存在,不是列不存在,但也值得排查)。

按照这几步走,大概率能找到问题所在——大部分情况都是旧数据库没更新,或者创建语句漏写了列。

内容的提问来源于stack exchange,提问作者Mwu La Flaga

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:43:17