当前位置: 首页 > news >正文

Android sqlite 使用简介

进行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注入相关问题。

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你! 

相关文章:

Android sqlite 使用简介

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

UE地形系统材质混合实现和Shader生成分析(UE5 5.2)

前言 随着电脑和手机硬件性能越来越高,游戏越来越追求大世界,而大世界非常核心的一环是地形系统,地形系统两大构成因素:高度和多材质混合,此篇文章介绍下UE4/UE5 地形的材质混合方案----基于WeightMap混合。 材质层 …...

Git分支与Git标签的介绍及其场景应用

目录 一、Git分支 1.1 定义 1.2 基本概念 1.3 特点与优势 1.4 Git分支操作命令 1.4.1 查看分支 1.4.2 创建分支 1.4.3 删除分支 1.4.4 切换分支 1.4.5 创建并切换到新建分支 1.5 场景应用 1.5.1 前期准备 1.5.2 具体操作 二、Git标签 2.1 定义 2.2 类型 2.3 标…...

Three.js——基于原生WebGL封装运行的三维引擎

文章目录 前言一、什么是WebGL?二、Three.js 特性 前言 Three.js中文官网 Three.js是基于原生WebGL封装运行的三维引擎,在所有WebGL引擎中,Three.js是国内文资料最多、使用最广泛的三维引擎。既然Threejs是一款WebGL三维引擎,那么…...

第八章认识Express框架

目录 Express模块化路由 基本概述 基本使用 基本构建 案例项目 Express接收请求参数 基本概述 基本类别 Express接收GET请求参数 Express接收POST请求参数 Express接收路由参数 Express模块化路由 基本概述 在Express中,路由是指确定应用程序如何响应对…...

【K8s集群离线安装-kubeadm】

1、kubeadm概述 kubeadm是官方社区推出的一个用于快速部署kubernetes集群的工具。这个工具能通过两条指令快速完成一个kubernetes集群的部署。 2、环境准备 2.1 软件环境 软件版本操作系统CentOS 7Docker19.03.13K8s1.23 2.2 服务器 最小硬件配置:2核CPU、2G内存…...

python工具CISCO ASA设备任意文件读取

​python漏洞利用 构造payload: /CSCOT/translation-table?typemst&textdomain/%2bCSCOE%2b/portal_inc.lua&default-language&lang../漏洞证明: 文笔生疏,措辞浅薄,望各位大佬不吝赐教,万分感谢。 免…...

TCP关闭的两种方法概述

一个TCP需要经过四次挥手才可以关闭连接&#xff0c;能够开启四次挥手的函数有两个&#xff1a; int close(int sockfd) int shutdown(int sockfd,int howto) 接下来就分别讲解一下这两个函数。 close()函数 函数原型 #include<unistd.h> int close(int sockfd)这个函…...

Git的Hooks机制

参考文章&#xff1a;详解如何在项目中使用git Hooks&#xff08;husky、yorkie&#xff09; git hooks钩子 git hooks是一些自定义的脚本&#xff0c;用于控制git工作的流程&#xff0c;分为客户端钩子和服务端钩子。  ~/work/step-time/ [master*] ll .git/hooks total…...

代码随想录算法训练营第四十九天|121. 买卖股票的最佳时机、122. 买卖股票的最佳时机 II

第九章 动态规划part10 121. 买卖股票的最佳时机 给定一个数组 prices &#xff0c;它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。 你只能选择 某一天 买入这只股票&#xff0c;并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最…...

Rust教程6:并发编程和线程通信

文章目录 线程初步join方法线程通信 Rust系列&#xff1a;初步⚙所有权⚙结构体和枚举类⚙函数进阶⚙泛型和特征 线程初步 在Rust中&#xff0c;开启多线程进行并发编程&#xff0c;只需调用thread::spawn&#xff0c;但这里有一个坑点&#xff0c;即spawn函数只有一个传入参…...

JVM在线分析-监控工具(jps, jstat, jstatd)

参考官方文档&#xff08;jdk11&#xff09; https://docs.oracle.com/en/java/javase/11/tools/troubleshooting-tools-and-commands.html#GUID-CB44BFBA-E5F9-4D80-8EE8-28E9F16BC451 1. 监控工具(jps, jstat, jstatd) jps -q Suppresses the output of the class name, J…...

Console LDAP 配置解密

之前通过短视频向大家介绍了 Console 如何集成 LDAP&#xff0c;但很多小伙伴反映按照视频里的配置后不成功。今天就结合小伙伴们反映的问题来跟大家详细介绍一下。 Console LDAP 完整的配置参数如下&#xff1a; 名称类型说明hoststringLDAP 服务器地址portintLDAP 服务器端口…...

node插件MongoDB(三)—— 库mongoose 的使用和数据类型(一)

前言 提示&#xff1a;使用mongoose 的前提是你安装了node和 MongoDB。 mongoose 官网文档&#xff1a;http://mongoosejs.net/docs/index.html 文章目录 前言一、安装二、基本使用1. 打开bin目录的mongod.exe文件2. 基本使用的代码&#xff08;连接mongodb 服务&#xff09;3.…...

基础(二)

基础&#xff08;二&#xff09; 字符串型 C风格&#xff1a;char 变量名[] “字符串值”&#xff1b; C风格&#xff1a;string 变量名 “字符串值” #include <iostream> using namespace std; #include <string>int main() {// C风格char str1[] "h…...

思维模型 目标效应

本系列文章 主要是 分享 思维模型&#xff0c;涉及各个领域&#xff0c;重在提升认知。明确目标&#xff0c;激发内在动机。 1 目标效应的应用 1.1 目标效应在教育领域的应用-棉花糖实验 美国斯坦福大学心理学系的教授米歇尔&#xff08;Walter Mischel&#xff09;曾经进行了…...

【从0到1设计一个网关】性能优化---Netty线程数配置与JVM参数配置

文章目录 Netty线程介绍Netty实战配置JVM参数与ZGCJVM与ZGC调优Netty线程介绍 在Netty中有两个比较重要的线程概念,一个是BOSS线程,一个是Woker线程。 Boss线程组: Boss线程组通常负责处理接受客户端连接的工作,即处理ServerSocketChannel的连接事件。 Boss线程会监听并接…...

node插件MongoDB(五)—— 库mongoose 的模块化(五)

文章目录 一、使用mongoose 模块化的原因二、准备工作2. 启动mongo.exe 和mongod.exe 两个程序连接数据库 三、基本模块的拆分1、基本逻辑2、代码3、代码图示说明 四、在index.js 中进一步的拆分1.拆分原因2.新建model文件夹存储文档的结构对象3.代码4.代码实际演示和注意点 一…...

Windows server 2008 R2 IIS搭建ASP网站教程

一、安装应用程序服务器 提示安装成功 二、添加角色服务asp 三、asp网站配置 放入源码 设置网站首页为index.asp: 设置应用程序池 四、设置网站目录属性 五、access数据库连接配置 Cd c:\Windows\System32\inetsrv appcmd list apppool /xml | appcmd set apppool /…...

Linux之基础开发工具gdb调试器的使用(三)

文章目录 一、Linux调试器-gdb使用1、安装gdb2、背景3、Debug和release4、区分Debug和release 二、Linux调试器-gdb命令演示1、显示指定行之后的代码&#xff08;自动记录最后一条指令&#xff09;2、断点1、打印断点2、查看断点3、删除断点4、使能&#xff08;禁用/开启&#…...

你的SSH密钥可能已经过期了运

引言 在现代软件开发中&#xff0c;性能始终是衡量应用质量的重要指标之一。无论是企业级应用、云服务还是桌面程序&#xff0c;性能优化都能显著提升用户体验、降低基础设施成本并增强系统的可扩展性。对于使用 C# 开发的应用程序而言&#xff0c;性能优化涉及多个层面&#x…...

lvgl-micropython、lv_micropython和lv_binding_micropython到底啥关系?一文读懂婆

一、背景与问题缘起 MySQL 5.6.51 版本下 2000 万行核心业务表开展新增字段操作&#xff0c;需求为新增BIGINT(19) NOT NULL DEFAULT 0 COMMENT 注释&#xff08;因业务实际需要存储大数值关联字段&#xff09;。 表的核心特性为Java 多线程密集读写&#xff0c;业务请求持续高…...

如何免费获取百度文库文档:3分钟快速上手指南

如何免费获取百度文库文档&#xff1a;3分钟快速上手指南 【免费下载链接】baidu-wenku fetch the document for free 项目地址: https://gitcode.com/gh_mirrors/ba/baidu-wenku 百度文库助手是一款能够免费获取百度文库文档内容的实用工具&#xff0c;通过简单的JavaS…...

Zotero SciPDF插件终极指南:3步实现文献PDF自动下载的完整方案

Zotero SciPDF插件终极指南&#xff1a;3步实现文献PDF自动下载的完整方案 【免费下载链接】zotero-scipdf Download PDF from Sci-Hub automatically For Zotero7 项目地址: https://gitcode.com/gh_mirrors/zo/zotero-scipdf 你是否曾因找不到论文PDF而焦虑&#xff1…...

告别Office!8个理由让你立即尝试这款在线PPT制作工具

告别Office&#xff01;8个理由让你立即尝试这款在线PPT制作工具 【免费下载链接】PPTist PowerPoint-ist&#xff08;/pauəpɔintist/&#xff09;, An online presentation application that replicates most of the commonly used features of MS PowerPoint, allowing for…...

Windows 11 LTSC 微软商店恢复指南:5个简单步骤让精简系统重获完整应用生态

Windows 11 LTSC 微软商店恢复指南&#xff1a;5个简单步骤让精简系统重获完整应用生态 【免费下载链接】LTSC-Add-MicrosoftStore Add Windows Store to Windows 11 24H2 LTSC 项目地址: https://gitcode.com/gh_mirrors/ltscad/LTSC-Add-MicrosoftStore Windows 11 24…...

使用Spring AI Alibaba构建智能体Agent赡

背景 在软件开发的漫长旅途中&#xff0c;"构建"这个词往往让人又爱又恨。爱的是&#xff0c;一键点击&#xff0c;代码变成产品&#xff0c;那是程序员最迷人的时刻&#xff1b;恨的是&#xff0c;维护那一堆乱糟糟的构建脚本&#xff0c;简直是噩梦。 在很多项目中…...

JAVA集合—ArrayList源码深度解析

前言ArrayList 可能是每个 Java 开发者最早接触、使用最频繁的集合类。但你是否真正理解过它的内部实现&#xff1f;比如&#xff1a;扩容机制是什么&#xff1f;为什么扩容是 1.5 倍&#xff1f;add() 和 remove() 的时间复杂度分别是多少&#xff1f;本文基于 JDK 21 源码&am…...

离散数学|代数系统核心概念与应用场景全解析

1. 代数运算&#xff1a;从买菜到编程的通用语言 第一次接触代数系统时&#xff0c;我盯着那些奇怪的符号发呆了半小时。直到有天在菜市场&#xff0c;看到大妈用计算器按"3515"&#xff0c;突然意识到&#xff1a;这不就是二元运算吗&#xff1f;代数运算本质上就是…...

GLM-5.1 深度解析:它为什么不只是一个更强的聊天模型?

GLM-5.1 深度解析&#xff1a;它为什么不只是一个更强的聊天模型&#xff1f;很多人看一个新模型&#xff0c;第一反应还是&#xff1a;它聊天强不强&#xff1f;推理行不行&#xff1f;中文味够不够&#xff1f; 但如果把视角放到 2026 年的大模型应用现场&#xff0c;你会发现…...