在具有修改的 android 版本的设备上,我收到此错误。例如在小米设备上。
String query = "select * from dialogues where userId = ? and topChat = 0 order by updatedAtByClient desc";
Cursor dialogRes = db.rawQuery(query, new String[]{userId});
在这里我得到异常:
android.database.sqlite.SQLiteException: no such column: topChat (code 1):,
while compiling: select * from dialogues where userId = ? and topChat = 0
order by updatedAtByClient desc
异常信息是我手写的,因为是用户截图发给我的,所以可能有错别字。
如何解决这个问题,为什么会这样?
UPD1:create table 语句类似于以下内容:
"CREATE TABLE IF NOT EXISTS dialogues(fieldName VARCHAR, camelCaseFieldName VARCHAR,
topChat INTEGER, createdAt DATE);";
当我更改数据库结构时,我有一个正确实现的更新方法,但是这个特定的表和字段名很长时间没有改变。
UPD2:我为有问题的用户制作了一个 apk,记录了该表的列,我确实在日志中看到了有问题的列,并且用户说这个版本工作正常。
所以似乎这个错误不会 100% 发生。很奇怪。也许有一种方法可以在创建数据库后检查数据库的完整性,并重新创建有错误的表?