Android SQLite无法读取stars列问题排查求助
解决SQLiteException: no such column: stars问题
问题核心
报错的本质是实际数据库表中不存在stars列,通常由两个原因导致:
- 数据库建表语句遗漏了
stars字段 - 数据库版本未更新,旧表未被替换或升级
修复步骤
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
相关产品推荐
相关产品推荐

