Android多线程下安全访问数据库
来源:互联网 发布:sql语句创建的表在哪 编辑:程序博客网 时间:2024/05/29 10:03
public class DatabaseHelper extends SQLiteOpenHelper { ... }
现在你想在不同的线程中对数据库进行写数据操作:
然后在你的Logcat中将输出类似下面的日志信息,而你的写数据操作将会无效。
上面问题的出现,源于你每创建一个 SQLiteOpenHelper 对象时,实际上也是在新建一个数据库连接。如果你尝试通过多个连接同时对数据库进行写数据操作,其一定会失败。
为确保我们能在多线程中安全地操作数据库,我们需要保证只有一个数据库连接被占用。
我们先编写一个负责管理单个 SQLiteOpenHelper 对象的单例 DatabaseManager 。
为了能在多线程中进行写数据操作,我们得修改一下代码,具体如下:
然后又导致另个崩毁
既然我们只有一个数据库连接,Thread1 和 Thread2 对方法 getDatabase() 的调用就会取得一样的 SQLiteDatabase 对象实例。之后的事情就是,当 Thread1 尝试管理数据库连接时,Thread2 却仍然在使用该数据库连接。这也就是导致 IllegalStateException 崩毁的原因。
示例:
然后你可以怎样子去调用它:
以后每当你需要使用数据库连接,你可以通过调用类 DatabaseManager 的方法openDatabase()。在方法里面,内置一个标志数据库被打开多少次的计数器。如果计数为1,代表我们需要打开一个新的数据库连接,否则,数据库连接已经存在。
在方法 closeDatabase() 中,情况也一样。每次我们调用 closeDatabase() 方法,计数器都会递减,直到计数为0,我们就需要关闭数据库连接了。
现在你可以线程安全地使用你的数据库连接了。
- Android多线程下安全访问数据库
- Android多线程下安全访问数据库
- Android多线程下安全访问数据库
- Android多线程下安全访问数据库
- Android多线程下安全访问数据库
- Android多线程下安全访问数据库
- Android多线程下安全访问数据库
- Android多线程下安全访问数据库
- Android多线程下安全访问数据库
- Android多线程下安全访问数据库
- Android多线程下安全访问数据库
- [Android][转]Android多线程下安全访问数据库
- 【Android】SQLite实例(多线程下安全访问数据库)
- Android中多线程访问数据库、DBHelper
- 数据库-多线程安全
- 无法在当前安全上下文下访问数据库
- 多线程环境下SQLite数据库并发访问的解决方案
- 多线程访问数据库
- 第11周 自选阅读3
- 测试用例
- 微软近年来很给力啊!
- 抑郁症的表现及危害
- 单链表应用--一元多项式求和
- Android多线程下安全访问数据库
- 中断处理流程分析
- android 三种定时器的写法
- 总体,个体,抽样,样本,样本容量,随机变量,期望,方差,离差,残差
- PHP的自动加载机制
- android中定时定位的实现
- FatFS文件系统详解-附移植建议
- 谈谈RTP传输中的负载类型和时间戳
- Leetcode 记录——Happy Number