На устройствах с модифицированными версиями Android я получаю эту ошибку. Например, на устройствах Xiaomi.
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 IF NOT EXISTS dialogues(fieldName VARCHAR, camelCaseFieldName VARCHAR,
topChat INTEGER, createdAt DATE);";
И у меня есть правильно реализованный метод обновления при изменении структуры БД, но эта конкретная таблица и имя поля не менялись долгое время.
UPD2: я сделал apk для пользователя с проблемами, который регистрирует эти столбцы таблицы, и я вижу проблемный столбец в журнале, и пользователь говорит, что эта версия работает нормально.
Так что кажется, что эта ошибка не происходит в 100% случаев. Очень странный. Может есть способ проверить базу на целостность после ее создания, и пересоздать таблицы с ошибками?
CREATE TABLE
? Также, возможно, стоит предоставить этому пользователю версию, которая может перечислять столбцы таблицы, чтобы вы могли видеть, как таблица создается на устройстве. - person Michael Dodd   schedule 02.02.2019