Android sqlite 使用简介

举报
霍格沃兹测试开发 发表于 2022/06/07 18:36:33 2022/06/07
【摘要】 进行Android应用开发时经常会用到数据库。Android系统支持sqlite数据库,在app开发过程中很容易通过SQLiteOpenHelper使用数据库,SQLiteOpenHelper依赖于Context对象,但是基于uiatomator1.0和Java程序等无法获取Context的应用如何使用数据库呢?通过以下方面介绍一下数据库的使用:①. Android App内如何创建数据库②...

进行Android应用开发时经常会用到数据库。Android系统支持sqlite数据库,在app开发过程中很容易通过SQLiteOpenHelper使用数据库,SQLiteOpenHelper依赖于Context对象,但是基于uiatomator1.0和Java程序等无法获取Context的应用如何使用数据库呢?

通过以下方面介绍一下数据库的使用:

①. Android App内如何创建数据库

②. Android App内创建数据库如何自定义文件路径

③. Android App内获取数据库流程解析

④. 无Context模式使用数据库,可在uiautomator1.0测试框架和其他app_process启动的进程内使用数据库。

App内常规使用数据库

Android应用内使用数据库需要借助于SQLiteOpenHelper类实现对数据库的操作。

使用数据库通过以下几步:

①. 创建私有类集成自SQLiteOpenHelper方法,并覆写onCreate、onUpdate方法实现对数据库升级降级操作。

②. 获取SQLiteOpenHelper对象实例。

③. 获取只读、读写类型数据库SQLiteDatabase对象实例

(getReadableDatabase()/getWritableDatabase()),当数据库升级或创建时才会调用onCreate、onUpdate方法。

④. 使用SQLiteDatabase接口实现数据库操作(增删改查)

数据库源码解析

1、SQLiteOpenHelper构造方法中仅仅做了参数的赋值操作,没有关联数据库操作。但是对数据库版本号有校验。

2、通过getWritableDatabase()方法获取数据库对象,实际是调用getDatabaseLocked(boolean writable)方法。

3、getDatabaseLocked(boolean writable)方法主要源码如下,该方法关联数据库文件获取SQLiteDatabase对象,并根据数据库的版本号变化调用SQLiteOpenHelper的周期方法,实现数据库onCreate和onUpgrade方法调用。

4、通过源码知道

mContext.getDatabasePath(mName).getPath()方法获取数据库路径,该方法实现位于ContextImpl类中。看源码逻辑知道如果传递数据库文件绝对路径则返回指定的文件对象,如果传递文件名则通过Context的getDatabasesDir()方法获取数据库存储路径。

自定义本地数据库文件路径

通过上面源码可以获知修改数据库文件路径有三种方式:

1

更改context中getDatabasesDir()方法的返回值;

2

构建SQLiteOpenHelper对象时传递数据库文件的绝对路径;

3

覆写SQLiteOpenHelper对象的获取数据库方法,自定义获取数据库获取逻辑,这种实现模式不需要依赖Context对象。

**1、更改context中getDatabasesDir()的返回值 **

①、自定义Application

②、覆写Application的getDatabasePath(String name)方法,在方法内指定自定义路径。

③、在AndroidManifest.xml中指定自定义Application

2、构建数据库时传入绝对路径:必须使用Context对象

3、在SQLiteOpenHelper子类中覆写

getWritableDatabase()和

getReadableDatabase():可不使用Context

使用建议

调用getWritableDatabase()获取数据库时会重新创建数据库实例,一般在程序中复用该数据库实例即可,如果保存多份数据库实例会导致OOM异常。

执行数据库操作时尽量使用API操作,不要自己拼接sql语句,避免sql注入相关问题。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。