我有一个带数据库的应用程序。
它只被Application类调用一次,然后引用转发给任何需要它的人。初始化后,我调用db = this.getWritableDatabase();
并将其保持打开状态。虽然简单Double的每次写入操作大约需要6-10 ms,但是第三次写入操作需要30-50 ms,最长可达8倍。
那是怎么来的?是初始化吗?我以为调用getWritableDatabase()
会为我初始化一切吗?还是有其他原因吗?我可以在某处阅读它,为什么以及如何表现?
提前致谢
编辑:为了使这一点更清楚:在数据库处理程序初始化之后,值会被写入,因此初始化将会很长时间。
编辑2:现在我深入研究了这个主题,我找到了两件事:
getWritableDatabase()
实际上没有打开任何东西,只是在执行第一个游标操作(如cursor.move()
)时它真的被加载了?这是对的吗?答案 0 :(得分:0)
public SQLiteDatabase getWritableDatabase ()
创建和/或打开将用于读写的数据库。第一次调用它时,数据库将被打开并
onCreate(SQLiteDatabase),
onUpgrade(SQLiteDatabase, int, int) and/or
onOpen(SQLiteDatabase) will be called.
成功打开后,数据库将被缓存,因此您可以在每次需要写入数据库时调用此方法。 (确保在不再需要数据库时调用close()。)
错误权限或完整磁盘等错误可能导致此方法失败,但如果问题得到解决,将来的尝试可能会成功。
数据库升级可能需要很长时间,您不应该从应用程序主线程调用此方法,包括来自ContentProvider.onCreate()。 返回
读取/写入数据库对象有效,直到调用close()
Throws
SQLiteException if the database cannot be opened for writing.
我希望这对你有所帮助。