gpt4 book ai didi

安卓 SQLiteException : no such column on custom roms

转载 作者:行者123 更新时间:2023-11-30 05:06:30 35 4
gpt4 key购买 nike

在具有修改过的 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

异常消息是我手写的,因为用户截图发给我了,所以可能会有错别字。

如何解决这个问题,为什么会这样?

更新 1:创建表语句看起来类似于:

"CREATE TABLE IF NOT EXISTS dialogues(fieldName VARCHAR, camelCaseFieldName VARCHAR,
topChat INTEGER, createdAt DATE);";

当我更改数据库结构时,我有一个正确实现的更新方法,但是这个特定的表和字段名称很长一段时间都没有改变。

UPD2:我为有问题的用户制作了一个 apk,记录了该表的列,我确实在日志中看到了有问题的列,用户说这个版本工作正常。

看来这个错误不会 100% 发生。很奇怪。也许有一种方法可以在创建数据库后检查其完整性,并重新创建有错误的表?

最佳答案

我认为这不是xiaomi 的问题。这似乎是不幸迁移的结果,其中没有添加新列,随后,用户可能仍使用该表的先前版本。并且对于缺失的列没有其他合乎逻辑的解释),仅仅是因为 CREATE TABLE 语句有效 - 或者无效。

仍然可以使用 ALTER TABLE 解决它。例如。当 SQLiteException 发生时,addColumnIfNotExists("dialogues", "topChat", "INTEGER DEFAULT 0"); ...为了不通过删除表,只是因为它缺少一些列。

public void addColumnIfNotExists(String tableName, String columnName, String dataType) {
Cursor cursor = null;
try {
cursor = db.rawQuery("SELECT * FROM " + tableName, null);
if(! Arrays.asList(cursor.getColumnNames()).contains(columnName)) {
db.execSQL(String.format("ALTER TABLE %s ADD COLUMN %s %s", tableName, columnName, dataType));
}
} finally {
if(cursor != null) {
cursor.close();
}
}
}

关于安卓 SQLiteException : no such column on custom roms,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54491701/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com