数据存储与访问课件.pptx
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《数据存储与访问课件.pptx》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据 存储 访问 课件
- 资源描述:
-
1、 数据存储与访问016.1 SharedPreference 存储0203046.2 SQLite 数据库6.3 文件存储6.4 数据共享056.5 本章小结本章导读任何一个应用程序都少不了与数据进行交互,例如任何一个应用程序都少不了与数据进行交互,例如QQ、微信、手、微信、手机银行等都需要大量的数据。通常情况下,将这些数据存放在机银行等都需要大量的数据。通常情况下,将这些数据存放在远程远程服务器的数据库服务器的数据库中,通过接口进行读取。中,通过接口进行读取。但是对于少量的数据,如程序配置信息(是否推送等),如果也采但是对于少量的数据,如程序配置信息(是否推送等),如果也采用存放远程数据库的
2、方法,则运行效率低,还占用数据库资源用存放远程数据库的方法,则运行效率低,还占用数据库资源,对,对于这种情况,于这种情况,Android提供了三种解决办法:使用提供了三种解决办法:使用SharedPreferences 存储数据、存储数据、Android内置轻量级数据库内置轻量级数据库 SQLite 存储数据、借助存储数据、借助 Java 的的 I/O 体系体系实现文件存储。实现文件存储。本章导读本章主要内容有:本章主要内容有:(1)SharedPreferences 存储;存储;(2)SQLite 数据库使用(包括手动建库和代码建库);数据库使用(包括手动建库和代码建库);(3)文件存储文件
3、存储(包括内部存储和外部存储);(包括内部存储和外部存储);(4)Android 外部存储的公有存储空间和私有存储空间外部存储的公有存储空间和私有存储空间;(5)ContentProvider 的使用(包括创建数据提供者和使的使用(包括创建数据提供者和使用数据提供者)。用数据提供者)。016.1 SharedPreference 存储SharedPreferences 数据文件的存储路径是唯一的,以数据文件的存储路径是唯一的,以 XML 文件的形式文件的形式保存于保存于/data/data/shared_prefs 目录下。目录下。将数据存储到将数据存储到SharedPreferences的基
4、本步骤如下:的基本步骤如下:(1)调用)调用 Context 提供的提供的 getSharedPreferences()方法来获取方法来获取 SharedPreferences 实例实例 SharedPreferences mySharedPreferences=getSharedPreferences(book_info,MODE_PRIVATE);6.1.1 将数据存储到 SharedPreferences016.1 SharedPreference 存储getSharedPreferences(String name,int mode)方法涉及两个参数,第一方法涉及两个参数,第一个参数个
5、参数 name 表示要访问的文件,由于表示要访问的文件,由于 SharedPreferences 文件存储的路文件存储的路径是唯一的,因此,此处径是唯一的,因此,此处 name 只需描述文件名即可。只需描述文件名即可。若为写入操作,而系统并没有若为写入操作,而系统并没有 name 文件,则会自动创建一个名为文件,则会自动创建一个名为 name 的文件。第二个参数的文件。第二个参数 mode 表示操作模式,例如表示操作模式,例如 MODE_PRIVATE,表,表示可以被本应用程序读示可以被本应用程序读/写。写。6.1.1 将数据存储到 SharedPreferences016.1 SharedP
6、reference 存储(2)获得)获得 Editor 对象来实现对数据的写入对象来实现对数据的写入SharedPreferences 本身并不具备写入数据的能力,它是通过调用自身的本身并不具备写入数据的能力,它是通过调用自身的 edit()方法来获取对应的方法来获取对应的 Editor 对象,由对象,由 Editor 对象来实现对数据的写对象来实现对数据的写入。例如:入。例如:Editor editor=mySharedPreferences.edit();editor.putString(bookname,Android应用开发实践教程应用开发实践教程);(3)调用)调用 apply()或
7、或 editor()方法提交修改方法提交修改6.1.1 将数据存储到 SharedPreferences016.1 SharedPreference 存储 apply()是将修改数据原子提交到内存是将修改数据原子提交到内存,而后异步真正提交到硬件磁盘而后异步真正提交到硬件磁盘,而而 commit()是同步地提交到硬件磁盘。是同步地提交到硬件磁盘。apply()方法会覆写之前内存中方法会覆写之前内存中的值,异步写入磁盘的值只是最后的值,而的值,异步写入磁盘的值只是最后的值,而 commit 每次都要写入磁盘,每次都要写入磁盘,而磁盘的写入相对来说是很低效的,所以而磁盘的写入相对来说是很低效的,所
8、以 apply 方法在频繁调用时要比方法在频繁调用时要比 commit 效率高很多。效率高很多。apply()方法没有返回值,而方法没有返回值,而 commit()方法返回方法返回 boolean 类型的值,类型的值,表明提交修改是否成功。而且表明提交修改是否成功。而且 apply()方法不会有任何失败的提示。方法不会有任何失败的提示。apply()和和 commit()这两方法的区别在于这两方法的区别在于:016.1 SharedPreference 存储SharedPreferences 接口至少提供了以下的方法来读取应用程序的数据。接口至少提供了以下的方法来读取应用程序的数据。publi
9、c abstract String getString(String key,String defValue):获取:获取 key 所指向的所指向的 value 值。若该值。若该 key 不存在,不存在,则返回默认值则返回默认值 defValue。public abstract Map getAll():获取所有:获取所有 SharedPreferences 数据,该函数返回值是一个以数据,该函数返回值是一个以 Key-Value 形式描述的形式描述的 Map 对象。对象。public abstract boolean contains(String key):判断是否包含:判断是否包含 ke
10、y 指向的指向的数据。数据。6.1.2 从 SharedPreferences 中读取数据016.1 SharedPreference 存储6.1.2 从 SharedPreferences 中读取数据String bookName=mySharedPreferences.GetString(bookname,none);/读取 key 值为bookname 指向的数据,若无,则返回none例如以下代码:例如以下代码:016.1 SharedPreference 存储6.1.3 SharedPreferences 举例026.2 SQLite 数据库l SQLite 是一个 2000 年由 D
11、.Richard Hipp 发布的开源嵌入式关系数据库l 普通数据库的管理系统比较庞大和复杂,会占用了较多的系统资源l 轻量级数据库 SQLite 的特点:(1)适合用于嵌入式系统(2)占用资源少,运行高效可靠,可移植性强026.2 SQLite 数据库SQLite 的核心大约有 3 万行标准 C 代码,因为模块化的设计使这些代码非常易于理解模块将复杂的查询过程分解为细小的工作进行处理SQLite 数据库由 8 个独立的模块构成,这些独立模块又构成了三个主要的子系统026.2 SQLite 数据库026.2 SQLite 数据库虚拟机:SQLite 数据库体系结构中最核心的部分是虚拟机,也称为
12、虚拟数据库引擎(Virtual Database Engine,VDBE)。与 Java 虚拟机相似,虚拟数据库引擎用来解释并执行字节代码。虚拟数据库引擎的字节代码由128个操作码构成,这些操作码主要用以对数据库进行操作,每一条指令都可以完成特定的数据库操作,或以特定的方式处理栈的内容。接口:由 SQLite C API 组成,因此无论是应用程序、脚本,还是库文件,最终都是通过接口与 SQLite 交互。026.2 SQLite 数据库编译器:在编译器中,分词器和分析器对SQL语句进行语法检查,然后把 SQL 语句转化为便于底层处理的分层数据结构,这种分层的数据结构称为“语法树”。然后把语法树
13、传给代码生成器进行处理,生成一种用于 SQLite 的汇编代码,最后由虚拟机执行。后端:后端由B-树、页缓存和操作系统接口构成,B-树和页缓存共同对数据进行管理。B-树的主要功能就是索引,它维护着各个页面之间复杂的关系,便于快速找到所需数据。页缓存的主要作用是通过操作系统接口在B-树和磁盘之间传递页面。026.2 SQLite 数据库6.2.1 手动建库在 Android 系统中,每个应用程序的 SQLite 数据库被保存在各自的/data/data/databases 目录下。缺省情况下,所有数据库都是私有的,仅允许创建数据库的应用程序访问,如果需要共享数据库则可以使用 ContentPro
14、vider虽然应用程序完全可以在代码中动态建立 SQLite 数据库,但使用命令行手工建立和管理数据库仍然是非常重要的内容,对于调试使用数据库的应用程序非常有用。026.2 SQLite 数据库6.2.1 手动建库手动建立数据库指的是使用 sqlite3 工具,通过手工输入命令行完成数据库的建立过程。Sqlite3 是 SQLite 数据库自带的一个基于命令行的 SQL命令 执行工具,并可以显示命令执行结果。Android SDK 的 tools 目录有 sqlite3 工具,同时,该工具也被集成在Android系统中。下面的内容将介绍如何连接到模拟器中的 Linux 系统,并在 Linux
15、系统中启动 sqlite3 工具,在 Android 程序目录中建立数据库和数据表,并使用命令在数据表中添加、修改和删除数据。026.2 SQLite 数据库6.2.1 手动建库使用 adb shell 命令连接到模拟器的 Linux 系统,在 Linux 命令提示符下输入 sqlite3 可启动 sqlite3 工具启动 sqlite3 后会显示 SQLite 的版本信息,显示内容如下:026.2 SQLite 数据库6.2.1 手动建库启动 sqlite3 后会显示 SQLite 的版本信息,显示内容如下:026.2 SQLite 数据库6.2.1 手动建库在启动 sqlite3 工具后,
16、提示符从“#”变为“sqlite”,表示用户进入 SQLite 数据库交互模式,此时可以输入命令建立、删除或修改数据库的内容。正确退出sqlite3工具的方法是使用.exit命令026.2 SQLite 数据库6.2.1 手动建库026.2 SQLite 数据库6.2.1 手动建库026.2 SQLite 数据库6.2.1 手动建库原则上,每个应用程序的数据库都保存在各自的/data/data/databases 目录下。但如果使用手工方式建立数据库,则必须手工建立数据库目录,目前版本无需修改数据库目录的权限。026.2 SQLite 数据库6.2.1 手动建库在SQLite数据库中,每个数据
17、库保存在一个独立的文件中。使用“sqlite3+文件名”的方式打开数据库文件,如果指定的文件不存在,sqlite3工具则自动创建新文件下面的代码将创建名为 employee 的数据库,在文件系统中将产生一个名为 employee.db 的数据库文件026.2 SQLite 数据库6.2.1 手动建库下面的代码在数据库中,构造了一个名为 employee 的表。使用 create table 命令,关系模式为 employee(_id,name,age,height)表包含四个属性,_id 是整型的主键;name 表示姓名,字符型,not null 表示属性值一定要填写,不可以为空值;age 表
18、示年龄,整数型;height 表示身高,浮点型。026.2 SQLite 数据库6.2.1 手动建库026.2 SQLite 数据库6.2.1 手动建库也可以使用.schema 命令查看建立表时使用的 SQL 命令如果当前数据库中包含多个表,则可以使用.schema 表名的形式,显示指定表的建立命令026.2 SQLite 数据库6.2.1 手动建库下一步是向 employee 表中添加数据,使用 insert into values 命令在下面的代码成功运行后,数据库的 employee 表将有三条数据。026.2 SQLite 数据库6.2.1 手动建库下一步是向 employee 表中添
19、加数据,使用 insert into values 命令在下面的代码成功运行后,数据库的 employee 表将有三条数据。026.2 SQLite 数据库6.2.1 手动建库上面的查询结果看起来不是很直观,使用表格方式显示更应更符合习惯,因此可以使用.mode 命令更改结果输出格式.mode 命令除了支持常见的 column 格式外,还支持csv格式、html格式、insert格式、line格式、list格式、tabs 格式和 tcl 格式下面使用 column 格式显示 employee 数据表中的数据信息026.2 SQLite 数据库6.2.1 手动建库更新数据可以使用 update
20、命令,命令格式为update 表名 set 属性=”新值”where 条件更新数据后,同样使用select命令显示数据,确定数据是否正确更新下面的代码将 LiBai 的年龄更新为112026.2 SQLite 数据库6.2.1 手动建库删除数据可以使用 delete 命令命令格式为delete from 表名where 条件下面的代码将 _id 为 3 数据从表 employee 中删除026.2 SQLite 数据库6.2.1 手动建库Sqlite3 工具还支持很多命令,可以使用.help 命令查询 sqlite3 的命令列表,也可以参考下表026.2 SQLite 数据库编号编号命令命令说
21、明说明1 1.bail ON|OFF.bail ON|OFF遇到错误时停止,缺省为遇到错误时停止,缺省为 OFFOFF2 2.databases.databases显示数据库名称和文件位置显示数据库名称和文件位置3 3.dump?TABLE?.dump?TABLE?.将数据库以将数据库以SQLSQL文本形式导出文本形式导出4 4.echo ON|OFF.echo ON|OFF开启和关闭回显开启和关闭回显5 5.exit.exit退出退出6 6.explain ON|OFF.explain ON|OFF开启或关闭适当输出模式,如果开启模式将开启或关闭适当输出模式,如果开启模式将更改为更改为col
22、umncolumn,并自动设置宽度,并自动设置宽度7 7.header(s)ON|OFF.header(s)ON|OFF开启或关闭标题显示开启或关闭标题显示8 8.help.help显示帮助信息显示帮助信息9 9.import FILE TABLE.import FILE TABLE将数据从文件导入表将数据从文件导入表1010.indices TABLE.indices TABLE显示表中所的列名显示表中所的列名1111.load FILE?ENTRY?.load FILE?ENTRY?导入扩展库导入扩展库手动建库026.2 SQLite 数据库手动建库026.2 SQLite 数据库手动建库
23、026.2 SQLite 数据库6.2.2 SQLiteDatabase在 android.database.sqlite 包中,Android 提供了 SQLiteDatabase 类,该类封装了一些操作数据库的 API,使用该类可以完成对数据库中的数据添加、查询、更新和删除的操作。由于在 Context 类中定义了 openOrCreateDatabase()方法,我们可以在活动页面代码或任何能取到 Context 的地方获取 SQLiteDatabase 实例。026.2 SQLite 数据库6.2.3 SQLiteOpenHelperSQLiteOpenHelper 是 Android
24、 提供的一个管理数据库的工具类,用于帮助创建或者打开和管理一个 SQLite 数据库。通常的用法是创建 SQLiteOpenHelper 的子类,IDE 会提示重写它的 onCreate()和 onUpgrade()两个方法。026.2 SQLite 数据库6.2.3 SQLiteOpenHelper(1)onCreate(SQLiteDatabase db):当调用SQLiteOpenHelper的getWritableDatabase()或getReadableDatabase()方法获取SQLiteDatabase实例时,如果数据库不存在,系统会自动生成一个数据库,然后调用onCreat
展开阅读全文