Android SQLiteOpenHelper打开/关闭/光标管理

时间:2017-05-02 20:16:34

标签: java android sqlite android-sqlite sqliteopenhelper

只是输入"上下文":我是android / java的新手,并且更加努力地工作了内存"密切关注",这引起了一些可能的问题笨

1)SQLiteOpenHelper.getWritableDatabase()返回指向已分配对象的指针或分配一个新的独立对象?

2)如何知道对象SQLiteOpenHelper.getWritableDatabase()是否在后台任务(线程)中工作?

3)从database.query创建的游标是依赖的,并与数据库对象共享内存(如果释放数据库将被释放)或者是一个可以在数据库内存空闲后使用的独立对象吗?

4)如果java处理内存本身,当需要Cursor.close()和SQLiteOpenHelper.getWritableDatabase()。close()时?

1 个答案:

答案 0 :(得分:0)

  1. getWritableDatabase() - 创建和/或打开将用于读写的数据库。第一次调用它时,将打开数据库并调用onCreate(SQLiteDatabase),onUpgrade(SQLiteDatabase,int,int)和/或onOpen(SQLiteDatabase)。
  2. 成功打开后,数据库缓存,因此每次需要写入数据库时​​都可以调用此方法。 (确保在不再需要数据库时调用close()。)错误权限或完整磁盘等错误可能导致此方法失败,但如果问题得到解决,将来的尝试可能会成功。

    2,3。一个Cursor实现,它公开SQLiteDatabase上的查询结果。 SQLiteCursor未在内部同步,因此使用来自多个线程的SQLiteCursor的代码在使用SQLiteCursor时应执行自己的同步。

    1. 关闭Cursor,释放所有资源并使其完全无效。与deactivate()不同,对requery()的调用不会使Cursor再次生效。