微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Android,SQLite连接和事务

我目前正在研究sqliteDatabase和相关的类,目的是为了更好地理解它如何处理并发(我当前的解决方案有效,但我得到的印象是我可能实际上在做多余的工作,因为它完成了并发性的假设不是为我处理).

对,关于sqliteOpenHelper的android文档说明了关于getWriteableDatabase方法的以下内容

Once opened successfully, the database is cached, so you can call this
method every time you need to write to the database. (Make sure to
call close() when you no longer need the database.)

我有点不清楚缓存的是什么(所以我目前有一个包装器为我做缓存).那么,这里发生了什么?两个sqliteDatabase实例是否围绕缓存/静态实例进行包装?

另外,如何处理实际锁定?如果我有两个单独的sqliteDatabase实例,由同一个sqliteOpenHelper实例创建,那么这些实例是否安全?如果我在一个事务上以独占模式开始事务,然后在另一个线程中启动另一个事务,在另一个sqliteDatabase实例上,我希望第二个事务在第一个完成之前不会启动.这是怎么回事?

解决方法:

It’s a little unclear to me what is being cached(so I currently have a wrapper that does the caching for me).

缓存sqliteDatabase对象.

If I create two sqliteDatabase instances with this method, and close one, the other one is still open.

假设您只有一个sqliteOpenHelper,则不能“使用此方法创建两个sqliteDatabase实例”.第二个getWriteableDatabase()调用返回与第一次调用相同的sqliteDatabase.

如果您只是从单个组件访问数据库(例如,只有一个活动或只有一个服务),请使用该组件持有的一个sqliteOpenHelper(以及扩展名,只有一个sqliteDatabase).如果从多个组件访问数据库,则需要直接使用单个sqliteOpenHelper实例,或者通过将数据库包装在ContentProvider中.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐