Android数据库 之 SQLite数据库

Android Studio 使用插件Database Navigation 连接 sqlite数据库 Database Navigation 是一款在 Android Studio 开发环境中非常实用的插件,它主要致力于帮助开发者更便捷、高效地管理和操作数据库,尤其是在 Android 项目涉及到数据库相关开发工作时,能够提升开发体验与效率。 阅读详情

Android数据库 

一、关系型数据库SQLIte

SQLite商标

  每个应用程序都要使用数据,Android应用程序也不例外,Android使用开源的、与操作系统无关的SQL数据库—SQLite。SQLite第一个Alpha版本诞生于2000年5月,它是一款轻量级数据库,它的设计目标是嵌入式的,占用资源非常的低,只需要几百K的内存就够了。SQLite已经被多种软件和产品使用,Mozilla FireFox就是使用SQLite来存储配置数据的,Android和iPhone都是使用SQLite来存储数据的。

SQLite体系结构图如下:

框架图     

  编译器包括Tokenizer(词法分析器)、 Parser(语法分析器)、Code Generator(代码产生器)。他们协同处理文本形式的结构化查询语句。

  后端由B-tree,Pager,OS Interface组成。B-tree的职责是负责排序,维护多个数据库页之间错综复杂的关系,将页面组织成树状结构,页面就是树的叶子。Pager负责传输,根据B-tree的请求从磁盘读取页面或者写入页面。

  公共服务中有各种实用的功能比如:内存分配、字符串比较,Unicode转换等。

 SQLite数据库是D.Richard Hipp用C语言编写的开源嵌入式数据库,支持的数据库大小为2TB。它具有如下特征:

1、轻量级

SQLite和C\S模式的数据库软件不同,它是进程内的数据库引擎,因此不存在数据库的客户端和服务器。使用SQLite一般只需要带上它的一个动态库,就可以享受它的全部功能。而且那个动态库的尺寸也相当小。

2、独立性

SQLite数据库的核心引擎本身不依赖第三方软件,使用它也不需要“安装”,所以在使用的时候能够省去不少麻烦。

3、隔离性

SQLite数据库中的所有信息(比如表、视图、触发器)都包含在一个文件内,方便管理和维护。

4、跨平台

SQLite数据库支持大部分操作系统,除了我们在电脑上使用的操作系统之外,很多手机操作系统同样可以运行,比如Android、Windows Mobile、Symbian、Palm等。

5、多语言接口

SQLite数据库支持很多语言编程接口,比如C\C++、Java、Python、dotNet、Ruby、Perl等,得到更多开发者的喜爱。

6、安全性

SQLite数据库通过数据库级上的独占性和共享锁来实现独立事务处理。这意味着多个进程可以在同一时间从同一数据库读取数据,但只有一个可以写入数据。在某个进程或线程向数据库执行写操作之前,必须获得独占锁定。在发出独占锁定后,其他的读或写操作将不会再发生。

 

SQLite官方网站(http://www.sqlite.org),了解更多内容请前往。

二、导出查看数据库文件

  在android中,为某个应用程序创建的数据库,只有它可以访问,其它应用程序是不能访问的,数据库位于Android设备/data/data/package_name/databases文件夹中。

  想要将数据库文件导出可以使用eclipse,如图所示:

 导出数据库文件

  查看数据库,使用SQlite Database Browser,如图所示:

 查看数据库

 

三、扩展类

3.1扩展SQLiteOpenHelper

  Android 不自动提供数据库。在 Android 应用程序中使用 SQLite,必须自己创建数据库,然后创建表、索引,填充数据。Android 提供了 SQLiteOpenHelper 帮助你创建一个数据库,你只要继承 SQLiteOpenHelper 类,就可以轻松的创建数据库。SQLiteOpenHelper 类根据开发应用程序的需要,封装了创建和更新数据库使用的逻辑。SQLiteOpenHelper 的子类,至少需要实现三个方法:

  构造函数,调用父类 SQLiteOpenHelper 的构造函数

  onCreate()方法;// TODO 创建数据库后,对数据库的操作

  onUpgrage()方法。// TODO 更改数据库版本的操作

  当你完成了对数据库的操作(例如你的 Activity 已经关闭),需要调用 SQLiteDatabase 的 Close() 方法来释放掉数据库连接。

  操作数据库的最佳实践是创建一个辅助类,例如联系人模块

  class ContactsDatabaseHelper extends SQLiteOpenHelper

3.2 Cursor类

  Android使用Cursor类返回一个需要的值,Cursor作为一个指针从数据库查询返回结果集,使用Cursor允许Android更有效地管理它们需要的行和列,你使用ContentValues对象存储键/值对,它的put()方法允许你插入不同数据类型的键值。

3.3 数据类型

  SQLite 和其他数据库最大的不同就是对数据类型的支持,创建一个表时,可以在 CREATE TABLE 语句中指定某列的数据类型,但是你可以把任何数据类型放入任何列中。当某个值插入数据库时,SQLite 将检查它的类型。如果该类型与关联的列不匹配,则 SQLite 会尝试将该值转换成该列的类型。如果不能转换,则该值将作为其本身具有的类型存储。比如可以把一个字符串(String)放入 INTEGER 列。SQLite 称这为“弱类型”(manifest typing.)。
 

四、数据库操作

4.1创建和打开数据库

  在Android中创建和打开一个数据库都可以使用openOrCreateDatabase方法来实现,因为它会自动去检测是否存在这个数据库,如果存在则打开,如果不存在则创建一个数据库:创建成功则返回一个SQLiteDatebase对象,否则抛出异常FileNotFoundException。

下面我们来创建一个名为Test的数据库,并返回一个SQLiteDatabase对象mSQLiteDatabase。

mSQLiteDatabase=this.openOrCreateDatabase("Test",MODE_PRIVATE,null);

4.2创建表

  通过execSQL方法来执行一条SQL语句。

String CREATE_TABLE="create table 表名(列名,列名,……)";
mSQLiteDatabase.execSQL(CREATE_TABLE);

  创建表的时候总要确定一个主键,这个字段是64位整型,别名_rowid。其特点就是自增长功能。当到达最大值时,会搜索该字段未使用的值(某些记录被删除_rowid会被回收),所以要唯一严格增长的自动主键必须加入关键字autoincrement。

4.3删除表

mSQLiteDatabase("drop table 表名");

4.4修改数据

4.4.1 插入记录

可以使用insert方法来添加数据,但是insert方法要求把数据都打包到ContentValues中,ContentValues其实就是一个Map,Key值是字段名称,Value值是字段的值。通过ContentValues的put方法就可以把数据放到ContentValues对象中,然后插入到表中去。具体实现如下:

复制代码
ContentValues cv=new ContentValues();
cv.put(TABLE_NUM,1);
cv.put(TABLE_DATA,"测试数据库数据");
mSQLiteDatabase.insert(Test,null,cv);

//同样可以使用execSQL方法来执行一条“插入“的SQL语句

String INSERT_DATA="insert into 表名(列名,……) values (值,……)";
mSQLiteDatabase.execSQL(INSERT_DATA);
复制代码

4.4.2 更新记录

复制代码
ContentValues cv=new ContentValues();
cv.put(TABLE_NUM,3);
cv.put(TABLE_DATA,"修改后数据");
mSQLiteDatabase.update(Test,cv,"num"+"="+rowId,null);

//同样可以使用execSQL方法来执行一条“更新”的SQL语句

String UPDATE_DATA="update 表名 set 列名=xxx where xxx;
mSQLiteDatabase.execSQL(UPDATE_DATA);
复制代码

update 表名 set 列名=xxx [where条件]

4.4.3 删除记录

 

//要删除数据可以使用delete方法
mSQLiteDatabase.delete("Test","WHERE _id="+0,null);

//也可以通过execSQL方法执行SQL语句删除数据
mSQLiteDatabase.execSQL("delete from 表名 where 条件");

 

 

4.5查询

SELECT 列名 FROM 表名 WHERE 条件

例如在联系人中保存3个联系人,data表如下:

 查询1

查询data1值为10086的项

 查询2

对查询条件和返回值稍做修改

查询3

LIKE的使用

Like经常和 %或者 _ 搭配使用。

%可与任意0个或者多个字符匹配,_可与任意单个字符匹配。

 查询4

 

 查询5

GLOB的使用

Glob与like非常相似,常与 * 搭配。

 查询6

限定和排序

关键字:order、limit、offset。

Order分为asc(默认升序),desc(降序)。

 查询7

 查询8

限定个数

 查询9

指定偏移

 查询10

 

内连接:通过表中两个字段进行连接,找出两个集合的交集。

  select  xxx from 表名1 inner join 表名2 on 表名1.列名 = 表名2.列名

左外连接:左表的所有项和内连接项。

  select  xxx from 表名1 left outer join 表名2 on 表名1.列名 = 表名2.列名

查询11

 

查询12

 

五、高级特性

5.1 视图

  视图是虚拟表,它的内容都派生自其它表的查询结果。虽然它看起来像基本表,但是它不是,因为基本表的内容是持久的,而视图的内容是使用时动态产生的。

  create view 表名 as 定义

5.2 索引

  索引是一种用来在某种条件下加速查询的结构。

  create index 索引名 on 表名(列名)

5.3 触发器

  触发器的作用是当具体的表发生特定的数据事件时,执行对应的操作。

  create trigger 触发器名 [before|after] [insert|delete|update|update of columns] on 表名 action

 

首先还谢谢是提供底稿的同事,这里只是介绍了基础的东西,感兴趣的同学,请SQLite官方网站(http://www.sqlite.org)了解。

 

 

这里提供一个博客园的博客

在Android中查看和管理sqlite数据库

具体地址:http://www.cnblogs.com/walkingp/archive/2011/03/28/1997437.html

 

其中的评论说道:

有两点需要注明一下:
1. data/data这个目录是需要root权限的;
2. adb shell进入手机后,不是每个手机都能找到sqlite3这个命令的。至少说我们拿到的工程样机里面就没有。


另参考:http://www.jb51.net/article/44309.htm

From: http://www.cnblogs.com/kgb250/archive/2012/08/28/sqlitedatabase.html


Android 拷贝db文件到sqlite数据库。 Android内部使用的是Sqlite数据库,有些app会需要使用这个数据库来存储一些东西。我们可以在代码中创建一个数据库,然后不断的insert进去数据,但这会比较麻烦。所以直接使用图形化工具设计好数据库之后,直接将其拷贝到安卓机器之中比较快速,也免去了不断的数据库操作。至于db文件的拷贝就直接使用java中的数据流写入即可,下面是操作的代码:import android.content.Cont 阅读详情

相关推荐

android 读取本地数据库db文件(Android sqlite)

String sql = " update user set name = ‘李四’ where name = ‘王杰’ ";// 判断sd卡是否存在。@param context app context,不然会造成内存泄漏。Android 本地 操作数据库逻辑(查,删,改)Android拷贝逻辑代码。

2501_90237187的博客 1276

Android之SQLite数据库使用

SQLite是Android系统集成的一个轻量级的数据库。Android提供了SQLiteDatabase代表一个数据库(底层就是一个数据库文件),一旦应用程序获得了代表指定数据库的SQLiteDatabase对象,接下来可通过SQLiteDatabase对象来管理、操作数据库了。

qq_38056514的博客 7379

Android——SQLite数据库使用详解,安卓开发面试基础

设置按钮边框填充颜色

2401_84002771的博客 1254

android--sqlite数据库创建的真正时候

最近项目不忙,打算自己封装android 数据库的操作。以前都是把别人的代码copy下来就用,今天意识到自己不亲手写一遍,东西始终是别人的。       如果想要在android中使用数据库,使用SQLite是一个非常好的选择,因为它是android内置的数据库,提供了很多支持。我们先手动创建一张表 继承SQLiteOpenHelper public class SQLH

u012489412的博客 2993

Android数据库:SQLite除了.db文件,还多出.db-shm,.db-wal文件

Android数据库:SQLite除了.db文件,还多出.db-shm,.db-wal文件 使用安卓数据库保存文件时,在Android Studio 的 Device File Explorer里数据库文件目录 /data/data/com.urovo.datatopc/databases/DATA.db 发现其目录下不仅有.db文件,还有两个其他文件 .db-shm和.db-wal文件 而且数据库存储文件DATA.db(这是我的数据库名字,你们的可能不一样)保存至本地,通过SQLite Develope

m0_53581523的博客 4938

android 读取本地数据库db文件(Android sqlite,工作感悟

} } if (!mRootPath.endsWith("/")) mRootPath += “/”; return mRootPath; } /** 设置工作目录 @param context app context,不然会造成内存泄漏 @param path */ public static void setWorkPath(Context context, String path) { mContext = context; if (null != getRootPath()) {

m0_64319298的博客 1868

Android SQLite的创建和简单使用

Android SQLite的创建和简单使用

qq_54348654的博客 2895

安卓db数据库查看工具——快速管理与分析SQLite数据库

SQLite 是 Android 内置的轻量级关系型数据库管理系统,为 Android 应用提供了一种高效、便捷的数据持久化方案。与传统的关系型数据库不同,SQLite 将数据库存储在文件系统中的单一文件内,从而简化了数据库的部署和管理。SQLite 支持标准的 SQL 语言,允许在没有服务器进程的情况下进行数据库操作,这使得它非常适合于资源有限的移动设备环境。在 Android 应用开发中,SQLite 数据库常用于本地数据存储、用户个性化设置记录以及应用内缓存。

weixin_32869687的博客 1940

查看安卓sqlite数据库工具:Android-Debug-Database

简要介绍 安卓开发过程中,有时需要查看sqlite数据库,核对数据.本文介绍Android-Debug-Database,非常好用. github地址:https://github.com/amitshekhariitbhu/Android-Debug-Database 功能: 支持查看手机该app的数据库和shared preference. 支持修改数据库和shared preferenc...

蓝不蓝编程 1521

掌握SQLite:使用DB Browser访问微信Android数据库

加密技术是信息安全的核心,旨在将明文数据转换为难以理解的密文形式,只有拥有正确密钥的用户才能解读这些数据。加密过程通常涉及两个主要组件:算法和密钥。数据库是现代软件应用不可或缺的组成部分,用于存储和管理数据。SQLite作为一个轻量级的数据库,被广泛应用于移动应用和桌面应用中。DB Browser for SQLite是一个开源工具,它允许用户直观地浏览和编辑SQLite数据库文件。本章将介绍DB Browser的功能,如何进行基本操作,并分享一些使用技巧。

weixin_31715353的博客 2434

sqlight:SQLight是用C ++ 11编写的轻量级MySQL客户端。 基于Ladislav Nevery的代码

SQL权限 SQLight是一个用C ++ 11编写的轻量级简单MySQL客户端。 SQLight返回JSON文档。 文档编写回调是可重写的。 SQLight支持多语句查询。 SQLight有一个可选的透明指标接口。 SQLight没有依赖项。 仅标准标头是必需的。 SQLight是跨平台的。 在MSVC / GCC下编译。 在Windows / Linux上均可使用。 SQLight很小。 一个标头和一个源文件。 SQLight基于Ladislav Nevery的代码。 SQLight是zlib / libpng许可的。 公共API(sq :: light) .connect(host,port,user,pass)连接到MySQL数据库 .reconnect()重新连接到数据库 .disconnect()与数据库断开连接 .is_connected()检查我们是否连

使用Android Debug Database查看安卓Sqlite数据库

一、加入依赖 debugImplementation 'com.amitshekhar.android:debug-db:1.0.4' 二、查看数据库 安装程序,并在Sqlite中插入数据 查看设备的ip地址(adb shell ifconfig) 使用浏览器输入地址(设备地址:8080/#) 例子: ...

Pyth_MR 343

python实现ECMS算法

ECMS(Equivalent Consumption Minimization Strategy)算法是一种用于混合动力汽车能量管理系统的优化策略。它通过计算等效油耗来平衡电池电量消耗和燃油消耗,从而优化整体能耗。以下是一个简单的Python实现,用于演示ECMS算法的基本思想。这个实现假设了一个简单的混合动力汽车模型,其中电池电量和燃油消耗是主要的优化目标。

weixin_45570158的博客 921

安卓获取本地时间插入sqlite_Android开发小结Part11:SQLite 通过.db文件导入已有数据库...

见过几次Android数据库操作,貌似都是在程序开始时建一个空数据库,然后进行操作。那,如果想要用一个已有的数据库怎么办?因为Android系统下的数据库是存放在/data/data/com.*.*(package name)/目录下,所以我们可以这样:1.将.db文件放到项目源码的res/raw目录下;2.用FileInputStream读取原数据;3.用FileOutPutStream把读取到...

weixin_39762441的博客 201

基于QGIS的DEM地形数据精细化处理:从裁剪、合并到成果输出

本文详细介绍了使用QGIS进行DEM地形数据的精细化处理流程,包括数据获取、裁剪、合并及成果输出等关键步骤。通过实战技巧和注意事项,帮助用户高效处理地形数据,适用于GIS分析、三维建模等应用场景。

weixin_29093017的博客 449

别再自己造轮子了!用MONAI Model Zoo里的预训练模型,5分钟搞定医学影像AI项目

本文介绍了如何利用MONAI Model Zoo中的预训练模型快速搭建医学影像AI项目,大幅节省开发时间和计算资源。通过实战案例展示了UNet、DenseNet121等核心模型的应用技巧,帮助临床医生和研究者5分钟内启动高质量医学影像分析,特别适合小样本场景下的病灶分割和分类任务。

weixin_33704234的博客 238

android程序db文件用什么编辑器,在 Android Studio 上调试数据库 ( SQLite )

以前 Eclipse 时代,调试 SQLite 都是将数据库文件导出到电脑,然后再用软件打开查看。现在我们用 Android Studio,有没有更方便的方法呢?SQLScout安装SQLScout 是一个 Android Studio 的插件,通过点击:Setting —> Plugings —> Browse Repositories搜索 SQLScout 安装即可。要是下载不动,...

weixin_33344952的博客 909

EMC案例:解决千兆网口RTL8211F EMI问题

摘要:本文分析了Amlogic S812平台OEM项目中RTL8211F-CG千兆网卡EMI辐射超标问题。发现百兆测试时25MHz时钟有3dB余量,但千兆125MHz时钟导致超标。问题根源包括:未关闭PHY芯片悬空CLKOUT引脚、TX/RXCLK端RC位置错误、包地不完整及参考地缺失。解决方案涉及软件关闭无用时钟、优化RC布局、加强包地与打孔、调整共模电感位置,并在HDMI 3.3V加磁珠。关键结论指出千兆网125MHz时钟需严格包地打孔,且RC取值需平衡EMI与通信性能。

电子绿洲的博客 1276

Android Debug Database:3步实现无痛SQLite数据库调试

还在为Android应用中的SQLite数据库调试而头痛吗?每次修改数据都需要导出数据库文件,用第三方工具打开,再重新导入吗?Android Debug Database将彻底颠覆你的调试体验,让你在浏览器中直接操作数据库,调试效率提升10倍! 这款开源工具通过内嵌HTTP服务器,将本地数据库映射到Web界面,支持实时查看、编辑、查询和导出操作。无论是普通SQLite数据库、Room持久化库,还

gitblog_00564的博客 789

逆向分析第一步:如何从HEX文件‘还原’出单片机的原始程序与数据?

本文详细解析了如何从HEX文件逆向分析出单片机的原始程序与数据,涵盖了固件逆向的底层逻辑与实践。通过介绍HEX文件的结构、内存映像重建技术以及专业工具链的使用,帮助读者掌握从十六进制数据到可执行代码的完整流程,适用于嵌入式系统开发和逆向工程领域。

weixin_29745609的博客 314

OSPF路由协议配置

构建直连连通让R1、R2、R3、R4加入OSPF,实现全网互通。掌握OSPF邻居状态的解读。掌握单区域OSPF的配置。理解OSPF的基本概念。AR3上的OSPF配置。AR4上的OSPF配置。R1上的OSPF配置。R2上的OSPF配置。

SURTR999的博客 7692
上一篇: Android ContentValues类
下一篇: 程序员知识点及工具汇总
WaveDHW
博客等级 码龄20年 455粉丝 159原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值