【发布时间】:2019-02-02 09:28:19
【问题描述】:
在带有修改过的 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% 发生。很奇怪。也许有办法在创建数据库后检查数据库的完整性,并重新创建有错误的表?
【问题讨论】:
-
你能告诉我们
CREATE TABLE声明吗?也可能值得为该用户提供一个可以list the columns of the table 的版本,这样您就可以看到该表是如何在设备上创建的。 -
因为如果这仅在某些设备上发生并且在现有的 Android 上“正常”工作,那么您可能需要在该特定设备上进行调试。看看你住的地方附近有没有设备实验室。
标签: android android-sqlite xiaomi