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

Android SQLite无法读取stars列问题排查求助

解决SQLiteException: no such column: stars问题

问题核心

报错的本质是实际数据库表中不存在stars列,通常由两个原因导致:

  1. 数据库建表语句遗漏了stars字段
  2. 数据库版本未更新,旧表未被替换或升级

修复步骤

1. 修正DBHelper的建表语句

打开DBHelper类,找到创建歌曲表的SQL语句,确保包含stars字段。正确的建表语句示例:

CREATE TABLE songs (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    title TEXT NOT NULL,
    singers TEXT NOT NULL,
    year INTEGER,
    stars INTEGER
);

如果原语句里没有stars,直接补上即可。

2. 更新数据库版本触发表升级

在DBHelper的构造方法中,把数据库版本号(构造方法第三个参数)加1。比如原来的super(context, DB_NAME, null, 1);改成super(context, DB_NAME, null, 2);。

接着在onUpgrade方法中处理表更新:

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    // 开发测试阶段用:删除旧表重建(会清空数据)
    db.execSQL("DROP TABLE IF EXISTS songs");
    onCreate(db);
    
    // 上线应用用:添加新列(保留现有数据)
    // db.execSQL("ALTER TABLE songs ADD COLUMN stars INTEGER");
}

3. 检查查询语句拼写

确认MainActivity中查询歌曲的代码里,stars字段拼写正确,比如:

Cursor cursor = db.query("songs", 
    new String[]{"id", "title", "singers", "year", "stars"}, 
    null, null, null, null, null);

4. 清除应用数据(可选)

如果以上操作后仍报错,去设备的设置-应用-你的应用-存储里清除数据,强制重新创建数据库。

额外提示

  • 开发时可以用SQLite可视化工具(比如DB Browser for SQLite)查看数据库结构,快速验证字段是否存在
  • 后续修改表结构时,必须同步更新建表语句和数据库版本号,避免同类问题重复出现

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 00:27:04