版权声明:本文为博主原创文章,未经博主同意不得转载。 https://blog.csdn.net/Sailingthink/article/details/27691953

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分析相关推荐

  1. android逆向分析概述_Android存储概述

    android逆向分析概述 Storage is this thing we are all aware of, but always take for granted. Not long ago, ...

  2. Android JNI入门第五篇——Android.mk分析

    转载请标明出处: http://blog.csdn.net/michael1112/article/details/56671708 江东橘子的博客 Android.mk文件是在使用NDK编译C代码时 ...

  3. Android多线程分析之二:Thread的实现

    Android多线程分析之二:Thread的实现 罗朝辉 (http://www.cnblogs.com/kesalin/) CC 许可,转载请注明出处 在前文<Android多线程分析之一:使 ...

  4. Android内存分析和调优(上)

    Android内存分析和调优(上) Android内存分析和调优(上) Android内存分析工具(四):adb命令 posted on 2017-09-25 19:29 时空观察者9号 阅读(... ...

  5. Android Telephony分析(七) ---- 接口扩展(异步转同步)

    本文是基于上一篇<Android Telephony分析(六) -- 接口扩展(实践篇)>来写的.  上一篇介绍的接口扩展的方法需要实现两部分代码:  1. 从APP至RIL,发送请求:  ...

  6. Android Telephony分析(六) ---- 接口扩展(实践篇)

    本文将结合前面五篇文章所讲解的知识,综合起来,实现一个接口扩展的功能.  如果还没有阅读过前面五篇文章的内容,请先阅读:  <Android Telephony分析(一) - Phone详解 & ...

  7. Android Telephony分析(五) ---- TelephonyRegistry详解

    本文紧接着上一篇文章<Android Telephony分析(四) -- TelephonyManager详解 >的1.4小节.  从TelephonyRegistry的大部分方法中:  ...

  8. Android Telephony分析(三) ---- RILJ详解

    前言 本文主要讲解RILJ工作原理,以便更好地分析代码,分析业务的流程.  这里说的RILJ指的是RIL.java (frameworks\opt\telephony\src\java\com\And ...

  9. Android Telephony分析(二) ---- RegistrantList详解

    前言 本文主要讲解RegistrantList的原理,以及如何快速分析RegistrantList相关的代码流程.  在Telephony模块中,在RIL.Tracker(ServiceStateTr ...

最新文章

  1. 面试:ArrayList哪种遍历效率最好?
  2. Delphi开发单机瘦数据库程序要点
  3. sqlserver多表联查分页
  4. 两个字符串的删除操作Python解法
  5. 【每日算法】基数排序算法
  6. 绿盟防火墙配置手册_双链路环境下不同品牌防火墙更换案例分享
  7. django mysql 一对多_请教,django中 如何向带有外键(一对多和多对多)数据库中批量插入数据?...
  8. 《EMCAScript6入门》读书笔记——2.let和const命令
  9. BG-UI,一个可以快速上手的后台UI框架
  10. java七武器系列_Java七武器系列多情环 --多功能Profiling工具 JVisual VM
  11. tensorflow2.0内存溢出解决办法
  12. CAN接口芯片MCP2515的波特率和滤波器设置问题
  13. java shiro教程_10 分钟快速上手 Shiro 新手教程
  14. 黑马python培训费用
  15. 如何安装thinkphp
  16. cad快速选择命令快捷键_CAD快捷键命令大全
  17. 用java swing编写的雷霆战机小游戏
  18. TXTReader功能之一:HotKey
  19. 服务器存储光模块需要同型号吗,最全面的光模块系列分类讲解
  20. VKL144A/B 36*4点 超低功耗LCD液晶显示驱动控制电路(IC) TSSOP48/QFN48超小体积,多用于测试仪/水电表/传感器/压力表等,超低工作电流约7.5微安

热门文章

  1. fprintf/fscanf函数分析
  2. python判断对象是否实例化_Python判断对象是否相等及eq函数的讲解
  3. python连连看小游戏_python实现连连看游戏
  4. nginx编译安装_Nginx编译安装nginx-upsync-module模块以实现动态负载
  5. 就业阶段-java语言进价_day05
  6. 基于哈希表的索引堆变形(Hackerrank: QHEAP1)
  7. LeetCode MySQL 1747. 应该被禁止的Leetflex账户
  8. 02.改善深层神经网络:超参数调试、正则化以及优化 W3. 超参数调试、Batch Norm和程序框架(作业:TensorFlow教程+数字手势预测)
  9. LeetCode MySQL 1511. Customer Order Frequency
  10. LeetCode 1090. 受标签影响的最大值(优先队列)