类型:编程助手大小:7.0M语言:中文评分:8.5标签:立即下载安卓数据库
1.关系数据库SQLIte
每个应用都使用数据,安卓应用也不例外。Android使用——SQLite,一个独立于操作系统的开源SQL数据库。SQLite的第一个Alpha版本诞生于2000年5月。它是一个轻量级的数据库,其设计目标是嵌入式的。它占用的资源非常少,只需要几百K的内存。SQLite已经被多种软件和产品使用,Mozilla FireFox使用SQLite存储配置数据,Android和iPhone都使用SQLite存储数据。
SQLite架构图如下:
编译器包括标记器、解析器和代码生成器。它们一起工作来处理文本形式的结构化查询语句。
后端由B树、寻呼机和操作系统接口组成。B-tree负责排序,维护多个数据库页面之间的复杂关系,将页面组织成树形结构,页面就是树的叶子。传呼机负责传输,根据B-tree的请求从磁盘读取页面或写入页面。
公共服务中有各种实用的功能,比如内存分配、字符串比较、Unicode转换等等。
SQLite数据库是D.Richard Hipp用C语言编写的开源嵌入式数据库,支持的数据库大小为2TB。它具有以下特点:
1.轻量级选手
SQLite不同于CS模式下的数据库软件,因为是进程内的数据库引擎,所以没有数据库的客户端或服务器。要使用SQLite,你只需要带一个它的动态库就可以享受它的所有功能。动态库的规模非常小。
2.独立性自立性
SQLite数据库的核心引擎本身不依赖第三方软件,也不需要安装,使用起来可以省去很多麻烦。
3.隔离
SQLite数据库中的所有信息(如表、视图、触发器)都包含在一个文件中,便于管理和维护。
4.跨平台
SQLite数据库支持大多数操作系统。除了我们在电脑上使用的操作系统,很多手机操作系统也可以运行,比如安卓、Windows Mobile、Symbian、Palm等等。
5.多语言界面
SQLite数据库支持多种语言编程接口,如CC、Java、Python、dotNet、Ruby、Perl等。这受到了更多开发者的喜爱。
6.安全
SQLite数据库通过数据库级的排他和共享锁实现独立的事务处理。这意味着多个进程可以同时从同一个数据库中读取数据,但只有一个进程可以写入数据。在进程或线程可以写入数据库之前,它必须获得排他锁。发出排他锁后,其他读或写操作将不会再次发生。
其次,导出和查看数据库文件
在安卓系统中,为一个应用程序创建的数据库只能被它访问,而不能被其他应用程序访问。数据库位于Android设备/数据/数据/package _ name/databases的文件夹中。
如果想要导出数据库文件,可以使用eclipse,如图所示:
检查数据库并使用SQlite数据库浏览器,如图所示:
第三,延伸类
3.1扩展SQLiteOpenHelper
安卓不会自动提供数据库。要在安卓应用程序中使用SQLite,您必须创建自己的数据库,然后创建表、索引和填充数据。安卓提供了SQLiteOpenHelper来帮助你创建一个数据库。您可以通过继承SQLiteOpenHelper类轻松创建数据库。SQLiteOpenHelper类封装了根据开发应用程序的需要创建和更新数据库的逻辑。SQLiteOpenHelper的子类至少需要实现三种方法:
构造函数,调用父类SQLiteOpenHelper的构造函数
OnCreate()方法;//创建数据库后对数据库的操作
OnUpgrage()方法。//TODO更改数据库版本的操作
当您完成对数据库的操作时(例如,您的活动已经关闭),您需要调用SQLiteDatabase的close()方法来释放数据库连接。
操作数据库的最佳实践是创建一个辅助类,如联系模块
类ContactsDatabaseHelper扩展了SQLiteOpenHelper
3.2光标类别
安卓使用Cursor类返回一个需要的值,Cursor作为指针返回数据库查询的结果集。使用Cursor可以让Android更有效地管理他们需要的行和列。您使用ContentValues对象来存储键/值对,它的put()方法允许您插入不同数据类型的键值。
3.3数据类型
SQLite和其他数据库最大的区别在于它对数据类型的支持。创建表时,可以在CREATE TABLE语句中指定列的数据类型,但是可以将任何数据类型放入任何列中。当一个值被插入到数据库中时,SQLite会检查它的类型。如果类型与关联的列不匹配,SQLite会尝试将值转换为列的类型。如果无法转换,该值将作为其自己的类型存储。例如,您可以将一个字符串放入INTEGER列。SQLite称之为“清单类型”。
四.数据库操作
4.1创建和打开数据库
OpenOrCreateDatabase方法可以用来在Android中创建和打开一个数据库,因为它会自动检测这个数据库是否存在,如果存在就打开它,如果不存在就创建一个数据库:如果创建成功,它会返回一个SQLiteDatebase对象,否则会抛出一个异常FileNotFoundException。
让我们创建一个名为Test的数据库,并返回一个SQLiteDatabase对象mSQLiteDatabase。
msqliteddatabase=this . openorcreatedatabase(' Test ',MODE_PRIVATE,null);
4.2创建表格
通过execSQL方法执行一条SQL语句。
String create _ table='创建表名(列名、列名、…)';msqliteddatabase . exec SQL(CREATE _ TABLE);
创建表时,必须确定主键。该字段是一个64位整数,别名为rowid。其特点是自我成长功能。当达到最大值时,将搜索该字段未使用的值(某些记录将被删除_rowid将被回收),因此必须将关键字autoincrement添加到唯一严格增长的自动主键中。
4.3删除表格
msqliteddatabase(' drop table表名');
4.4修改数据
4.4.1插入记录
可以使用insert方法添加数据,但是insert方法需要将所有数据打包到ContentValues中,content values实际上是一个Map,Key Value是字段名,Value值是字段值。使用ContentValues的put方法,您可以将数据放入ContentValues对象,并将其插入到表中。具体实现如下:
content values cv=new content values();cv.put(TABLE_NUM,1);Cv.put(TABLE_DATA,‘测试数据库数据’);插入(测试,空,cv);execSQL方法也可用于执行“INSERT”SQL语句String INSERT _ DATA=' INSERT in table name(列名,…) values(值,…)';msqliteddatabase . exec SQL(INSERT _ DATA);
4.4.2更新记录
content values cv=new content values();cv.put(TABLE_NUM,3);Cv.put(TABLE_DATA,‘修改数据’);msqliteddatabase . update(Test,cv,' num' '=' rowId,null);execSQL方法也可以用来执行“UPDATE”SQL语句String UPDATE_DATA='update表名集列名=xxx其中XXX;msqliteddatabase . exec SQL(UPDATE _ DATA);
更新表名集列名=XXX[其中条件]
4.4.3删除记录
//要删除数据,可以使用delete方法msqliteddatabase . delete(' test ','其中_ id=' 0,null);//也可以通过execSQL方法执行SQL语句删除数据msqlitedatabase.execsql('从条件所在的表名中删除');
4.5询问
从表名中选择列名条件
例如,在联系人中保存3个联系人,数据表如下:
查询data1值为10086的项目
稍微修改查询条件和返回值
LIKE的使用
Like常用于%或_。
%可以匹配任何0个或更多字符,而_可以匹配任何单个字符。
GLOB的使用
Glob与like非常相似,经常与*配对。
限定和排序
关键词:订单、限额、抵销。
顺序分为asc(默认升序)和desc(降序)。
少数
指定偏移量
内部连接:连接表中的两个字段来查找两个集合的交集。
从表名1的内部联接表名2中选择xxx。列名=表名2。列名
左外联接:左表的所有项和内联接项。
从表名1的左外部联接表名2中选择xxx。列名=表名2。列名
动词(verb的缩写)高级功能
5.1视图
视图是一个虚拟表,它的内容来自其他表的查询结果。虽然它看起来像一个基本表,但它不是,因为基本表的内容是持久的,而视图的内容是在使用它时动态生成的。
创建视图表名作为定义
5.2指数
索引是在一定条件下用来加快查询速度的结构。
在表名(列名)上创建索引名
5.3触发
触发器的作用是在特定的表中发生特定的数据事件时,执行相应的操作。
在表名操作上创建触发器触发器名称[前|后][插入|删除|更新|列更新]