2

我在已经定义了索引的数据库上尝试了这两个查询:

myDB.rawQuery("drop index my_index", null);
myDB.rawQuery("create index my_index on mytable(row_table)", null);

我得到这个错误:

(1) index my_index already exists

然而,当我使用 sqlite3 在我的计算机上的 shell 中执行这些非常相同的查询时,它可以完美运行!

Android 上的这些查询有什么问题?

4

3 回答 3

1

您可以添加IF EXISTS子句以仅在索引存在时尝试删除它,从而避免有关缺少索引的错误:

database.execSQL("DROP INDEX IF EXISTS INDEX_NAME")

这对我有用。

于 2018-12-07T13:10:56.260 回答
0

使用execSQL()而不是rawQuery()用于数据库模式操作。

execSQL()两者都编译并运行 SQL 程序。

rawQuery()仅编译 SQL 程序,但将其执行推迟到返回的Cursor. 编译 SQL 会验证诸如表/列/索引名称之类的标识符,因此这就是您收到错误的原因rawQuery()

于 2018-12-07T16:34:34.503 回答
0

以我的经验 sqlite(3) 不允许您删除索引。看来您必须删除表,然后再删除索引。

于 2018-05-26T10:19:41.930 回答