我已经升级了我的Nexus 7与Android 5.0 Lollipop,之前,我的应用程序运行良好与sqlite数据库,但现在每当我执行任何类型的查询,它给我log cat错误,如:
12-09 12:37:04.942: E/sqliteLog(13041): (284) automatic index on area(server_id) 12-09 12:37:04.942: E/sqliteLog(13041): (284) automatic index on account(area_id) 12-09 12:37:04.942: E/sqliteLog(13041): (284) automatic index on staff_visit(account_id) 12-09 12:37:04.942: E/sqliteLog(13041): (284) automatic index on ordertab(account_id) 12-09 12:37:04.960: E/sqliteLog(13041): (284) automatic index on area(server_id) 12-09 12:37:04.960: E/sqliteLog(13041): (284) automatic index on account(area_id) 12-09 12:37:04.960: E/sqliteLog(13041): (284) automatic index on staff_visit(account_id) 12-09 12:37:04.960: E/sqliteLog(13041): (284) automatic index on ordertab(account_id) 12-09 12:37:04.978: E/sqliteLog(13041): (284) automatic index on area(server_id) 12-09 12:37:04.978: E/sqliteLog(13041): (284) automatic index on account(area_id) 12-09 12:37:04.978: E/sqliteLog(13041): (284) automatic index on staff_visit(account_id) 12-09 12:37:04.978: E/sqliteLog(13041): (284) automatic index on ordertab(account_id)
Automatic indexing在sqlite 3.7.17中引入。有这个功能的sqlite的版本只有
included in Android L developer preview.这就是为什么你只在Lollipop但不是更早的消息。即使它被记录为错误,它只是一个消息。
基本上,自动索引在您对非索引列执行查找时起作用。 sqlite假设有这么多的数据,生成临时索引比原始查找便宜。
请考虑使用CREATE INDEX为查找列添加显式的永久索引。例如,在您的CREATE TABLE:
CREATE INDEX indexname ON tablename(columnname);
其中您可以从sqlite生成的自动索引消息中选择tablename(columnname)。
如果你只想要旧的行为回来,你可以禁用自动索引
PRAGMA automatic_index=off;