首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SqliteDatabase处理程序-为什么第一次写查询花费的时间比其他查询要长

SqliteDatabase处理程序-为什么第一次写查询花费的时间比其他查询要长
EN

Stack Overflow用户
提问于 2014-10-06 09:37:44
回答 1查看 105关注 0票数 0

我有一个有数据库的应用程序。

应用程序类只调用它一次,然后将引用转发给需要它的人。当它被初始化时,我调用db = this.getWritableDatabase();并让它处于打开状态。每个简单的双写操作都需要6-10毫秒左右,而第一个写操作需要30-50毫秒,长度是原来的8倍。

那是怎么回事?是初始化吗?我以为打电话给getWritableDatabase()会为我初始化所有的东西?或者还有别的原因?我能在某个地方读到它,为什么和它的行为吗?

提前感谢

编辑:为了更清楚地说明这一点:值是在DB处理程序初始化后写成的,因此初始化工作将结束很长时间。

编辑2:既然我深入研究了这个主题,我发现了两件事:

  1. 据说,对未编入索引的表的查询要慢一些。一直都是这样吗?安卓不是创造了一个像sqlite_autoindex_tablename_1这样的索引吗?这不是解决问题的办法吗?
  2. getWritableDatabase()并不真正打开任何东西,而是在执行第一个游标操作(如cursor.move() )时真正加载?对吗?
EN

回答 1

Stack Overflow用户

发布于 2014-10-06 10:01:19

代码语言:javascript
复制
public SQLiteDatabase getWritableDatabase ()

创建和/或打开将用于读写的数据库。第一次调用时,数据库将被打开,并且

代码语言:javascript
复制
 onCreate(SQLiteDatabase), 
 onUpgrade(SQLiteDatabase, int, int) and/or 
 onOpen(SQLiteDatabase) will be called.

一旦成功打开,数据库就会被缓存,因此您可以在每次需要写入数据库时调用此方法。(确保在不再需要数据库时调用close() )

错误,如错误的权限或完整的磁盘可能导致此方法失败,但如果问题得到解决,以后的尝试可能会成功。

数据库升级可能需要很长时间,不应该从应用程序主线程调用此方法,包括从ContentProvider.onCreate()调用。返回

读/写数据库对象有效,直到close()被称为

代码语言:javascript
复制
Throws

 SQLiteException    if the database cannot be opened for writing.

希望这能帮到你。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26213542

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档