Android SQLiteDatabase分析
Android中的数据存储使用的小巧的SQLite数据库。为了方便java层使用SQLite,android做了大量的封装,提供了一些列的类和API。本文章就揭露这些封装背后的类图关系。
老规矩,首先上图:
SQLiteOpenHelper是Android SDK所提供的一个帮助类,通过此类来管理数据库的创建和版本号控制。
通过SQLiteOpenHelper函数getReadableDatabase和函数getWritableDatabase能够得到一个SQLiteDatabase对象。用户通过继承SQLiteOpenHelper类,实现其抽象函数,以实现数据库表格的创建。版本号的升级等功能。
从UML途中能够看到SQLiteDatabase中有一个成员变量指向DatabaseErrorHandler接口。这个对象用来处理数据库发生异常的case。我们能够实现这个接口来处理数据的异常case,比方数据库损坏打不开。就会调用到这个接口的onCorruption函数。
SQLiteDatabase提供了对数据库的一些操作函数。比方query。insert。delete等。这里仅仅说一种case:query。途中绿色的线条代表着query的调用流程走向。通过SQLiteDatabse的query函数,能够得到一个SQLiteCursor对象,它实现了Cursor接口。SQLiteCursor代表着查询数据库后的结果集。假设是本进程内调用SQLiteDatabse,那么得到Cursor接口实际上是SQLiteCursor对象,假设是跨进程,比方通过ContentProvider的query接口查询一个Uri得带一个Curosr接口,那么实际的对象将是一个支持跨进程通信的Cursor对象。这里就不做具体的描写叙述了。在以后的文章中再单独解说Cursor的结构体系。
SQLiteDatabse的一个特色是对多线程的訪问做了封装。每一个线程都有保存着一个session。用来和数据库通信。而实际的通信过程是seesion从connect pool中得到一个SQLiteConnection连接。通过这个连接来操作native层真正的数据库。每次操作数据库的时候都必须得到一个连接。
SQLiteConnectionPool控制了连接的类型。对于WAL模式的数据库。仅仅能有一个可写的连接,能够有多个读的连接。
这样读和写就能够同一时候进行了。当一个可写的连接已经被占用了。假设此时有线程申请写的连接,那么这个线程会进入等待队列。直到有可利用的写连接为止。对于journal mode的数据库。4.2的代码是仅仅同意有一个连接。
SQLiteProgram代表着一次对数据库操作的各种资源。
它里面保存着SQL语句,所操作的数据库对象,以及SQL语句所绑定的參数。
转载于:https://www.cnblogs.com/ldxsuanfa/p/10919583.html
Android SQLiteDatabase分析相关推荐
- android逆向分析概述_Android存储概述
android逆向分析概述 Storage is this thing we are all aware of, but always take for granted. Not long ago, ...
- Android JNI入门第五篇——Android.mk分析
转载请标明出处: http://blog.csdn.net/michael1112/article/details/56671708 江东橘子的博客 Android.mk文件是在使用NDK编译C代码时 ...
- Android多线程分析之二:Thread的实现
Android多线程分析之二:Thread的实现 罗朝辉 (http://www.cnblogs.com/kesalin/) CC 许可,转载请注明出处 在前文<Android多线程分析之一:使 ...
- Android内存分析和调优(上)
Android内存分析和调优(上) Android内存分析和调优(上) Android内存分析工具(四):adb命令 posted on 2017-09-25 19:29 时空观察者9号 阅读(... ...
- Android Telephony分析(七) ---- 接口扩展(异步转同步)
本文是基于上一篇<Android Telephony分析(六) -- 接口扩展(实践篇)>来写的. 上一篇介绍的接口扩展的方法需要实现两部分代码: 1. 从APP至RIL,发送请求: ...
- Android Telephony分析(六) ---- 接口扩展(实践篇)
本文将结合前面五篇文章所讲解的知识,综合起来,实现一个接口扩展的功能. 如果还没有阅读过前面五篇文章的内容,请先阅读: <Android Telephony分析(一) - Phone详解 & ...
- Android Telephony分析(五) ---- TelephonyRegistry详解
本文紧接着上一篇文章<Android Telephony分析(四) -- TelephonyManager详解 >的1.4小节. 从TelephonyRegistry的大部分方法中: ...
- Android Telephony分析(三) ---- RILJ详解
前言 本文主要讲解RILJ工作原理,以便更好地分析代码,分析业务的流程. 这里说的RILJ指的是RIL.java (frameworks\opt\telephony\src\java\com\And ...
- Android Telephony分析(二) ---- RegistrantList详解
前言 本文主要讲解RegistrantList的原理,以及如何快速分析RegistrantList相关的代码流程. 在Telephony模块中,在RIL.Tracker(ServiceStateTr ...
最新文章
- 面试:ArrayList哪种遍历效率最好?
- Delphi开发单机瘦数据库程序要点
- sqlserver多表联查分页
- 两个字符串的删除操作Python解法
- 【每日算法】基数排序算法
- 绿盟防火墙配置手册_双链路环境下不同品牌防火墙更换案例分享
- django mysql 一对多_请教,django中 如何向带有外键(一对多和多对多)数据库中批量插入数据?...
- 《EMCAScript6入门》读书笔记——2.let和const命令
- BG-UI,一个可以快速上手的后台UI框架
- java七武器系列_Java七武器系列多情环 --多功能Profiling工具 JVisual VM
- tensorflow2.0内存溢出解决办法
- CAN接口芯片MCP2515的波特率和滤波器设置问题
- java shiro教程_10 分钟快速上手 Shiro 新手教程
- 黑马python培训费用
- 如何安装thinkphp
- cad快速选择命令快捷键_CAD快捷键命令大全
- 用java swing编写的雷霆战机小游戏
- TXTReader功能之一:HotKey
- 服务器存储光模块需要同型号吗,最全面的光模块系列分类讲解
- VKL144A/B 36*4点 超低功耗LCD液晶显示驱动控制电路(IC) TSSOP48/QFN48超小体积,多用于测试仪/水电表/传感器/压力表等,超低工作电流约7.5微安
热门文章
- fprintf/fscanf函数分析
- python判断对象是否实例化_Python判断对象是否相等及eq函数的讲解
- python连连看小游戏_python实现连连看游戏
- nginx编译安装_Nginx编译安装nginx-upsync-module模块以实现动态负载
- 就业阶段-java语言进价_day05
- 基于哈希表的索引堆变形(Hackerrank: QHEAP1)
- LeetCode MySQL 1747. 应该被禁止的Leetflex账户
- 02.改善深层神经网络:超参数调试、正则化以及优化 W3. 超参数调试、Batch Norm和程序框架(作业:TensorFlow教程+数字手势预测)
- LeetCode MySQL 1511. Customer Order Frequency
- LeetCode 1090. 受标签影响的最大值(优先队列)