Android,SQLite连接和事务

Android,SQLite连接和事务,第1张

概述我目前正在研究SQLiteDatabase和相关的类,目的是为了更好地理解它如何处理并发(我当前的解决方案有效,但我得到的印象是我可能实际上在做多余的工作,因为它完成了并发性的假设不是为我处理).对,关于SQLiteOpenHelper的android文档说明了关于getWriteableDatabase方法的以下内容

我目前正在研究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中.

总结

以上是内存溢出为你收集整理的Android,SQLite连接和事务全部内容,希望文章能够帮你解决Android,SQLite连接和事务所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1105878.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-28
下一篇 2022-05-28

发表评论

登录后才能评论

评论列表(0条)

保存