第七章 Android数据存储图文图文课件
第07章Android中的数据存储3.

7.3.2 SQLITE数据库相关类
SQLiteOpenHelper是Android提供的管理数据的工具类,主要用于数据 库的创建、打开和版本更新。一般用法是创建SQLiteOpenHelper类的子类,
并扩展它的onCreate()和onUpgrade()方法(这两个方法是抽象的,必须扩
展),选择性的扩展它的onOpen()方法。 SQLiteDatabase getReadableDatabase():以读写的方式打开 SQLiteDatabase对象,内部调用getWritableDatabase()方法; SQLiteDatabase getWritableDatabase():以写的方式打开 SQLiteDatabase对象,一旦打开成功,将会缓存该数据库对象; abstract void onCreate(SQLiteDatabase db):当数据库第一次被 创建的时候调用该方法; abstract void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion):当数据库需要更新的时候调用该方法;
由于SQLite允许存入数据时忽略底层数据列实际的数据类型,因 此SQLite在解析建表语句时,会忽略建表语句中跟在字段名后面的数 据类型信息。create table person_tb (id integer primary key autoincrement, name varchar(20)),因此在编写建表语句时可以省 略数据列后面的类型声明。
7.3.1 SQLITE数据库简介
SQLite最大的特点是可以把各种类型的数据保存到任何字段中 ,而不用关心字段声明的数据类型是什么。例如:可以把字符串类型 的值存入INTEGER类型字段中,或者在布尔型字段中存放数值类型等 。
Android数据存储培训课程PPT(62张)

// 存储数据到XML记录文件 SharedPreferences mySharedPreferences = getSharedPreferences(
MYPREFS, MODE_PRIVATE); // 获得修改所用的SharedPreferences对象 SharedPreferences.Editor editor = mySharedPreferences.edit();
MYPREFS, MODE_PRIVATE); String stringPreference; stringPreference = mySharedPreferences.getString(TEXT_KEY, ""); text.setText(stringPreference); }
});பைடு நூலகம்
SQLite数据库
• 嵌入式数据库的一大好处就是在你的程序内部不需要网络配置,也不 需要管理。因为客户端和服务器在同一进程空间运行。SQLite 的数 据库权限只依赖于文件系统,没有用户帐户的概念。SQLite 有数据 库级锁定,没有网络服务器。它需要的内存,其它开销很小,适合用 于嵌入式设备。你需要做的仅仅是把它正确的编译到你的程序。
SQLite数据类型
• SQLite是无类型的,这意味着你可以保存任何类 型的数据到你所想要保存的任何表的任何列中, 无论这列声明的数据类型是什么,对于SQLite来 说对字段不指定类型是完全有效的,如:
• Create Table ex1(a, b, c);
• SQLite允许忽略数据类型,但是仍然建议在你的 Create Table语句中指定数据类型, 因为数据类 型对于你和其他的程序员交流, 或者你准备换掉 你的数据库引擎。 SQLite支持常见的数据类型, 如:
第7章数据存储.ppt

第七章 Android数据存储
在对数据库进行完操作之后应有反馈消息提示。 记录日志数据库表结构:
数据库名:PocketBlog 数据表名:DiarysTb 表结构:
字段名 d_id d_title d_content d_face d_datetime d_uno
类型 integer varchar text int datetime varchar
实现。
Android应用开发教程
ContentProvider
ContentProvider 常见的接口:
第七章 Android数据存储
query(Uri uri,String[] projection,String selection, String[] selectionArgs, String sortOrder)
} …...
Android应用开发教程
ContentProvider
ContentProvider
第七章 Android数据存储
Android程序中的数据(如:SharedPreferences、文件数据和
数据库数据等)都是私有的。
ContentProvider是实现两个程序间进行数据交换的组件。
});
delete():删除表中数据。有三个参数:
第一个参数:String,数据表名称。 第二个参数:String ,条件语句。 第三个参数:String[],条件值。 例:sqliteDatabase.delete("user", "id=?", new String[]{"1"});
是Android自带的轻量级关系型数据库。
第07章Android中的数据存储1.

应用程序的数据文件默认保存在/data/data/ <package name>/files目录下,文件的后缀名随意。
7.1.1 手机内置存储空间文件的存取
在手机内置存储空间中创建文件、写入内容的一般步骤: (1)调用openFileOutput()方法,传入文件的名称和操作 的模式,该方法将会返回一个文件输出流; (2)调用write()方法,向这个文件输出流中写入内容; (3)调用close()方法,关闭文件输出流。
读取手机内置存储空间中文件的一般步骤: (1)调用openFileInput()方法,传入需要读取数据的文 件名,该方法将会返回一个文件输入流对象; (2)调用read()方法读取文件的内容; (3)调用close()方法,关闭文件输入流。
7.1.1 手机内置存储空间文件的存取
1、当我们手机上不存在该文件时,我们先写后读与先读 后写有区别吗?程序会不会出错?
文件可以被其他应用读取;
Context.MODE_WORLD_WRITEABLE =2:表示当前
文件可以被其他应用写入。
7.1.1 手机内置存储空间文件的存取
如果希望文件被其他应用读和写,可以传入: Context.MODE_WORLD_READABLE + Context.MODE_WORLD_WRITEABLE
7.1.1 案例
程序清单:FileTest\res\layout\activity_main.xml
<LinearLayout xmlns:android="/apk/res/androi xmlns:tools="/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <EditText android:id="@+id/writeText" android:layout_width="match_parent" android:layout_height="wrap_content" android:minLines="2" →设置文本输入框最少为两行 android:hint="@string/hint"/> →设置文本输入框的提示信息 <Button android:id="@+id/write" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/write"/>
Android数据存储(Data Storage)

Android提供几种保存持久化应用程序数据的选择。
依赖具体的需求来选择解决适合的方案,如数据应该是应用程序私有的还是共享的,以及数据所需要的存储空间等。
以下是可选择的数据存储方案:共享偏好(Shared Preferences)用键---值对的形式保存私有的原始数据。
内部存储(Internal Storage)在设备的内存上保存私有的数据。
外部存储(External Storage)在共享的外部存储器上保存公共的数据。
SQLite数据库在私有的数据库中保存结构化的数据。
网络连接(Network Connection)把数据保存在自己的互联网服务器上。
Android提供了内容提供器(content provider),能够你的私有数据公开给其他应用程序。
内容提供器是一种公开应用程序数据的读写访问权限的可选组件,这种读写访问会受到你所施加的任何限制的影响。
使用共享偏好SharedPreference类提供了一个一般性的框架,它允许用原始类型数据的键---值对的形式来保存和获取持久化的数据。
使用SharedPreference能够保存任意类型的原始类型数据:布尔型、浮点型、整数型、以及字符串。
这种数据会跨越用户的会话周期被持久化保存(即使是应用程序进程被杀死)。
有两种方法来为应用程序获取SharedPreferences对象:1.getSharedPreferences()方法---如果需要多个用名称来标识的偏好文件,就要使用这个方法,它的第一个参数要指定偏好文件的名称。
2.getPreferences()方法---如果仅需要针对Activity的一个偏好文件,就使用这个方法。
因为这个方法仅返回当前Activity的偏好文件,不需要提供偏好文件的名称。
以下是向偏好文件中写入数据的方法:1.调用edit()方法来获取一个SharedPreferences.Editor对象;2.调用诸如putBoolean()和putString()等方法来添加要保存的值;3.调用commit()方法来提交要保存的新值。
Android7-Android 数据存储

内容概要
SharedPreferences存储方式; 文件存储方式;
SQLite数据库存储方式;
ContentProvider存储方式;
网络存储方式.
SharedPreferences存储方式
Android提供了5种存储方式,分别是 1) SharedPreferences存储方式; 2) 文件存储方式; 3) SQLite数据库存储方式; 4) ContentProvider存储方式; 5) 网络存储方式.
文件பைடு நூலகம்储方式
文件存储方式是一种较常用的方法,在Android中读 取/写入文件的方法,与 Java中实现I/O的程序是完 全一样的,提供了openFileInput()和 openFileOutput()方法来读取设备上的文件。 String fn = “moandroid.log”; FileInputStream fis = openFileInput(fn); FileOutputStream fos = openFileOutput(fn,Context.MODE_PRIVATE); 提示:openFileInput和openFileOutput方法中用到的 文件都是存储在/data/data/packageName/files目录 下的。
ContentProvider
ContentProvider实现 要创建我们自己的Content Provider的话,我们需要 遵循以下几步: a. 创建一个继承了ContentProvider父类的类 b. 定义一个名为CONTENT_URI,并且是public static final的Uri类型的类变量,你必须为其指定 一个唯一的字符串值,最好的方案是以类的全名称, 如:
第七章 Android 数据存储

第七章 Android 数据存储7.1 File存储Android上的文件存储与J2SE当中的文件存储类似,支持以文件的输入输出流来读取文件。
7.1.1 文件的读写Android在Context类当中提供了打开文件输入和输出流的方法。
这连个MODE_APPEND 、 MODE_WORLD_READABLE 、 MODE_WORLD_WRITEABLE当中的一种,第一种mode是表示该文件只能被当前程序读写,第二种是以追加的方式打开文件。
第三种是文件内容可以被其它程序读取,第四种是文件内容可以被其他程序读写。
下面通过一个实例来看如何读写文件。
1.创建一个名为TestFile的项目。
2.打开Activity文件,添加代码如下。
从上代码不难发现跟J2SE当中的IO数据读取基本类似。
7.1.2 读写SD卡上文件上小节主要介绍的是应用程序数据文件夹里的文件读取,这种存储方式有一定的限制,因为手机本身内置的存储空间是有限的,为了能够存储更多的数据,通常用户都会为手机添加一张SD卡,SD卡可以大大的扩充手机的存储能力。
本小节将重点来介绍如何读取SD卡上的文件。
Environment类中提供了方法来判断和获取SD卡的存在和获取路径。
需要特别注意的是在SD卡上读取文件前必须在AndroidManifest文件中先添加相应的权限。
下面通过实例来具体了解。
1.创建一个名为TestSDFile的项目。
2.打开AndroidManifest文件,添加权限如下第八行。
3.打开main.xml文件,添加代码内容如下。
4.新建一个名为FileUtil类,封装读写数据方法,如下图。
5.打开Activity文件,添加代码内容如下。
6.运行应用代码,输入内容如下图。
7.2 SQLite 数据库SQLite是Android系统当中的一个轻量级的数据库。
是一款开源的嵌入式数据库引擎,对多数的SQL92标准提供了支持,相较于其它大型的数据库来说,SQLite 是一个轻量级的数据库,它所占的资源小,处理速度快。
Android移动开发详解 第7章 Android数据存储编程

第7章 Android数据存储
7.1.1 File类及常用方法
➢ File类的常用方法:
➢ boolean exists() //测试文件是否存在 ➢ boolean delete() //删除此对象指定的文件 ➢ boolean createNewFile() //创建新的空文件 ➢ boolean isDirectory() //测试此对象表示的文件是否为目录 ➢ boolean mkdir() //创建由该对象表示的目录
第7章 Android数据存储
7.1.1 File类及常用方法
➢ File类的常用方法(续) :
➢ boolean mkdirs() //创建包括父目录的目录 ➢ String getAbsolutePath() //返回此对象表示的文件的绝对路径名 ➢ String getName() //返回此对象表示的文件的名称 ➢ String getParent() //返回此对象路径名的上一级,若路径名没有上一级,则返回null ➢ String renameTo(newFile) //将文件名重命名为文件对象newFile
第7章 Android数据存储
7.1.1 File类及常用方法
➢创建文件、删除文件、重命名文件的代码示例 ➢创建文件的名称, 假设文件名字为"myFile.txt"
public static final String FILE_NAME="myFile.txt"
第7章 Android数据存储
7.1.1 File类及常用方法
Android数据存储编程
第7章 Android数据存储
7.1 Android中的文件操作 7.2 SharedPreferences 7.3 SQLite数据库数据存储
第07章Android中的数据存储5.

7.5 获取网路资源
由于手机的计算能力、存储能力都比较有限,它通常是 作为移动终端来使用,具体的数据处理是交给网络服务器来 进行的,而它主要的优势在于携带方便,因此,获取网络资
源非常重要。
Android完全支持JDK本身的TCP、UDP网络通信,也支持 JDK提供的URL、URLConnection等通信API。 除此之外,Android还内置了HttpClient,可方便地发送 HTTP请求,并获取HTTP响应。
7.5 获取网路资源
注意:Android2.3以后开始提供了一个新的类StrictMode ,该类用于捕捉发生在应用程序主线程中耗时的磁盘、网络访 问或函数调用,可以帮助开发者改进程序,使主线程处理UI和 动画在磁盘读写和网络操作时变得更平滑,避免主线程被阻塞 。而2.3以下版本则不支持该类的。如果直接在主程序中处理 网络连接操作,在2.3以后版本中会抛出 NetworkOnMainThreadException异常,而在之前的版本是则不 会。因此,通常采用子线程来处理一些网络连接操作,这样所 有版本都适用。 要想获取网络资源,还必须添加访问网络的许可权限。
7.5 显示html网页案例
程序清单:AccessHtml\src\com\example\accessurl\MainActivity.java new Thread() { public void run() { try { URL httpUrl = new URL("/"); HttpURLConnection conn = (HttpURLConnection) httpUrl .openConnection(); →设置连接超时 conn.setConnectTimeout(5 * 1000); conn.setRequestMethod("GET"); →以get方式发起请求,GET大写 if (conn.getResponseCode() != 200) throw new RuntimeException("请求url失败"); InputStream iStream = conn.getInputStream(); →得到网络返回的输入流 result = readData(iStream, "utf-8"); conn.disconnect(); myHandler.sendEmptyMessage(0x1122); } catch (Exception ex) { ex.printStackTrace(); } } }.start(); }
Android平台应用软件开发课件:数据存储

数据存储
而网络数据的存储,则很好地解决了本地存储所存在的 缺陷。将数据存储在网络中,用户更换手机也不会造成数据 的丢失,用户也不能随意的编辑数据,可以使数据的完整性 和安全性得到很大的提升。但凡事有利弊,将数据存储在网 络中意味着需要不停的访问服务器,会造成手机电量和流量 的快速消耗。作为开发者,需要在两者之间取一个平衡点, 以达到数据的最优存储。
commit(): 当Editor指定的数据完成后,使用该方法提交 数据,即真正存入文件中。
数据存储
6.1.2 SharedPreferences存储数据的实现 利用SharedPreferences方式存取数据的步骤如下: 第一步,通过上下文Context获取SharedPreferences对象; 第二步,如果存放数据,则先要利用edit()方法获取
数据存储
6.5 项 目 演 练
6.5.1 项目分析 创建Android项目SavaData,我们来制作一个记账本的
小项目,来将本节的内容做一个整合。先来分析一下这个项 目:实现记账本,那么必须要保存支出消费记录;需要记录 账目的类型,是支出还是收入;需要记录账目本次资金流动 的大小;需要记录创建的时间;可能还会有一些备注信息。
数据存储
6.5.2 项目创建步骤 创建项目的步骤: (1) 数据库的结构已经分析完成,已经知道数据库中的
字段有id,记录的创建时间,消费的类型,消费的金额,消 费的备注。
数据存储
4.数据查询 查询操作相对于上面的几种操作要复杂些,因为我们经 常要面对着各种各样的查询条件,所以系统也考虑到这种复 杂性,为我们提供了较为丰富的查询形式
数据存储
代码示例中,已经用到了这几个常用方法中的一些,在 具体使用的过程中,可以根据需要选择不同的方法进行应用。
第07章Android中的数据存储2.

7.2.1 案例
该程序实现保存用户登录信息的功能,用户第一次登录时 可设置是否记住密码和是否自动登录。如果用户勾选记住密码 复选框,则下次登录时,会直接显示用户名和密码,用户只需 单击登录即可。
第一次登录
பைடு நூலகம்
记住密码后登录
7.2.1 案例
登录界面布局文件如下。程序清单:SaveLoginInfo\res\layout\activity_main.xml
<LinearLayout xmlns:android="/apk/res/android" xmlns:tools="/tools" android:layout_width="match_parent" android:layout_height="match_parent" →垂直线性布局 android:orientation="vertical" > →表格布局 <TableLayout android:layout_width="match_parent" android:layout_height="wrap_content" > <TableRow> <TextView →用户名文本显示框 android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="20dp" android:text="@string/name" android:textSize="18sp" /> →文本文字大小 <EditText →输入用户的文本编辑框 android:id="@+id/name" android:layout_width="240dp" →文本编辑框宽度为240dp android:layout_height="wrap_content" /> </TableRow>
第七章_数据存储

SQLite用于存储结构化数据。 默认情况下,SQLite数据库是应用程序私有的。 数据库存储位置:
在DDMS的File Explorer中展开到/data/data/<package name> /databases下可以看到。
Android应用开发教程
SQLite数据库
SQLite数据库相关类/接口
SQLite数据库
SQLite
第七章 Android数据存储
是Android自带的轻量级关系型数据库。 支持多数的SQL92标准。 是一种嵌入到应用程序内部的数据库。 包括数据库、表在内的所有数据都存放在一个单一的文件中。 最大支持数据库到2TB。 数据库的权限只依赖于文件系统。
SQLiteOpenHelper类
Cursor接口
ContentValues类
ContentValues存储一些名值对。提供数据库的列名、数据映射信息。 ContentValues对象代表了数据库的一行数据。
Android应用开发教程
SQLite数据库
SQLiteDatabase类
MODE_PRIVATE ,( MODE_PRIVATE =0) ,应用程序私有。常用! MODE_WORLD_READABLE ,( MODE_WORLD_READABLE =1) ,其他程序可读。 MODE_WORLD_WRITEABLE ,( MODE_WORLD_WRITEABLE =2 ) ,其他程序可写。
看到。
Android应用开发教程
Preference存储
第七章 Android数据存储
每个应用程序都有一个SharedPreferences对象。
精品课件-Android程序设计教程-第七章 Android数据存储

指定查询的表名 指定查询的列明
指定 where 的约束条件 为 where 中的占位符提供具 体内容 分组方式 定义组的过滤器 指定查询结果的排序方式
方
法
moveToFirst()
moveToNext()
7.3 SharedPreferences的使用
• SharedPreferences是一个轻量级的存储类,特别适合用 于保存软件配置参数,例如用于登录时的用户名、密码、 性别等参数。SharedPreferences保存数据,其实质是用 xml文件存放数据,文件存放在/data/data/<package name>/shared_prefs目录下。
模型。
• (3)配置LitePalApplication,打开 AndroidManifest.xml文件,在<application>标签内添加 如下代码:
• android:name="org.litepal.LitePalApplication"
• 谢谢
每一种知识都需要努力, 都需要付出,感谢支持!
7.4.2 升级数据库
• 当我们需要对数据库中的表进行删除或增加时,就可以使 用SQLiteOpenHelper帮助类中onUpgrade()方法。
7.4.3 添加数据
• 对数据的操作无非有四种,即CRUD,其中C代表添加 (Create),R代表查询(Retrieve),U代表更新 (Update),D代表删除(Delete)。Android提供了一系 列的辅助性方法,使得在Android中不去编写SQL语句,也 能轻松完成所有的CRUD操作。
第07章Android中的数据存储4.

的是哪个ContentProvider,然后调用相应的操作方法;
ContentResolver的方法内部实际上是调用该ContentProvider的 对应方法,而ContentProvider方法内部是如何实现的,其他应用程 序是不知道具体细节的。只是知道有这个方法。这就达到了统一接口 的目的。 对于不同的数据的存储方式,该方法内部的实现是不同的,而外 部访问方法都是一致的。
7.4.1 CONTENTPROVIDER简单介绍
ContentProvider是Android四大组件之一,如果要开发自己的 ContentProvider必须实现Android系统提供的ContentProvider基类,并且
需要在AndroidManifest.xml文件中进行配置。
1、继承ContentProvider并重写增、删、查、改等方法; 2、在AndroidManifest.xml使用<provider>对该ContentProvider进行配置 。<manifest .... > <application....> <provider android:name=".MyProvider"
scheme 主机名或authority 路径 ID
scheme:ContentProvider(内容提供者)的scheme已经由 Android所规定, schevider操作常用类介绍
主机名(或叫Authority)用于唯一标识这个ContentProvider,外部调用者 可以根据这个标识来找到它。 路径(path)用于确定我们要操作该ContentProvider中的什么数据,一个 ContentProvider内可能包含多种数据,路径的构建应根据业务而定,例如:
Android移动应用开发技术与实践课件第7章 数据库与存储技术

❖ 在数据库创建好后便可以使用SQL语句向数据库中添加数据,首先将创建表的SQL语句存储在String变量中,然后使用data变量调用 execSQL方法进行操作。execSQL方法用来执行SQL代码,也就是说执行你在前面创建的String中所编写好的SQL语句。此方法在Query组 建中,Query组件还有一个Open方法,也是用来执行SQL代码的,但二者之间有不同之处:Open方法只能用来执行SQL语言的查询语句 (Select命令),并返回一个查询结果集。execSQL方法除了可执行Select语句外还可执行其它SQL语句(如Update、Insert、Delete等), 此方法不返回执行的结果。在选择时使用execSQL即可。
7.2数据库操作
图7-4 运行后结果
【程序说明】: l 这里跟删除操作差不多,先初始化一个用于储存SQL语句的StringBuffer的对象,并
且使用append()方法将SQL操作传进去。 l 初始化一个SQLiteDatabase的对象data,如果不成功抛出异常。
l 长按选中要修改的数据点击修改,将oppoR15改成vivo。
7.2数据库操作
❖ 7.2.4数据的修改
❖ 修改数据的方法有两种:(1)调用SQLiteDatabase的update(String table,ContentValues values,String whereClause,String[] whereArgs)方法。参数一跟insert()相同也是表名,参数二是ContentValues对象,要把更新的 数据装进去,参数三是更新条件,参数四是更新条件数组。(2)编写更新语句,调用execSQL()执行更新。下列代码 为更新数据代码。
❖
data.execSQL(SQL_Insert);
第七章 数据存储

提问
多媒体
教师:讲解演示
学生:观察思考
知识
讲解
课演示
1.数据存储分类
2.SharedPreference
3.内部存储
4.外部存储
5.SQLite数据库
6.ContentProvider
7.网络存储
演示
讲授
多媒体
系统演示
教师:讲解演示
学生:观察思考
案例讲解
仿QQ登陆
数据查询并加载音乐列表
内容提供(ContentProvider)
归纳
总结
教师讲授
教师:总结
学生:思考总结
6.ContentProvider
7.网络存储
能力目标:
1.熟悉Android的数据存储方法
2.熟练掌握SharedPreference
3.熟练掌握SQLite
4.了解ContentProvider原理
5.掌握ContentResolver的使用方式
6.了解网络存储
教学内容
教学单元1.数据存储分类
教学单元2.SharedPreference
Android是基于Linux的系统,每个应用有独立的进程,这些进程之间本来是不能互相访问数据的,如果需要在各个应用程序之间共享数据,我们需要使用ContentProvider(内容提供者)来实现,ContentProvider可以提供一个统一的接口使上层调用者不用关心数据存储的细节问题。
ContentProvider是Android的四大组件之一,它可以把应用的私有数据公开给其他的应用程序,它是一个可选组件,可以在应用开发者规定的约束之下为其他的应用程序提供对本应用的读写权限。
模仿练习
教师:巡视指导
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
7.4.1 创建数据库
• Android为了能够更加方便地管理数据库,专门提供了一个 SQLiteOpenHelper帮助类。该类是一个抽象类,具有 onCreate()和onUpgrade()两个抽象方法,这就意味着我们 需要创建一个自己的帮助类去继承它,然后分别在这两个方 法中去实现创建、升级数据库的逻辑。
• SQLiteOpenHelper帮助类中还有两个非常重要的实例方法: getReadableDatabase()和getWritableDatabase()方法。这 两个方法都可以创建或打开一个现有的数据库,并返回一个 可对数据库进行读写操作的对象。
• SQLiteOpenHelper帮助类中还有两个构造方法可供重写,一 般使用参数少一点的构造方法即可。这个构造方法中接收4 个参数,第一个参数是Context,必须要有它才能对数据库 进行操作;第二个参数是数据库名,创建数据库时使用的就 是这里指定的名称;第三个参数允许我们在查询数据的时候 返回一个自定义的Cursor,一般都是传入null;第四个参数 表示当前数据库的版本号,可用于对数据库进行升级操作。
• (3)配置LitePalApplication,打开AndroidManifest.xml 文件,在<application>标签内添加如下代码:
• android:name="org.litepal.LitePalApplication"
• 谢谢
感谢Leabharlann 谢谢,精品课件 资料搜集感谢
谢谢,精品课件
• (3)使用SharedPreferences.Editor编辑对象的putXxx() 方法来保存数据。
• (4)使用SharedPreferences对象的getXxx()方法来读取数 据。
• (5)使用SharedPreferences.Editor编辑对象的commit() 方法将数据提交到XML文件中。
让IT教学更简单A,nd让roITid学程习序更设有计效教程
第七章 Android数据存储
目录
• 7.1 数据存储方式简介 • 7.2 文件存储 • 7.3 SharedPreferences的使用 • 7.4 SQLite数据库存储 • 7.5 LitePal操作数据库
学习目标
• 了解数据存储方式的特点 • 掌握文件存储、SharedPreferences存储的使用 • 掌握SQLite数据库的增、删、改、查的使用 • 掌握LitePal插件操作数据库
7.4 SQLite数据库存储
• SQLite数据库比传统的数据库更加适用于嵌入式系统,因为 它占用空间非常少,运行高效可靠,可移植性好,并且提供 了零配置(zero-configuration)运行模式。
• SQLite数据库的优势在于其嵌入到使用它的应用程序中。这 样不仅提高了运行效率,而且屏蔽了数据库使用和管理的复 杂性,程序仅需要进行最基本的数据操作,其它操作可以交 给进程内部的数据库引擎完成。
• <?xml version="1.0" encoding="UTF-8" ?>
• <litepal>
•
<dbname value="BookStore"></dbname>
•
<version value="1"></version>
•
<list></list>
• </litepal>
• 其中,<dbname>标签用于指定数据库名,<version>标签用 于指定数据库版本号,<list>标签用于指定所有的映射模型。
7.4.5 删除数据
• SQLiteDatabase类中也提供了一个非常好用的delete()方法, 用于删除数据。这个方法有三个参数,第一个参数仍然是表 名,第二、第三个参数是用于约束删除某一行或某几行的数 据,不指定的话默认就是删除所有行。
7.4.6 查询数据
• SQLiteDatabase类中还提供了一个query()方法用于对数据 进行查询。这个方法的参数非常复杂,最短的一个方法重载 也需要传入7个参数。
7.3 SharedPreferences的使用
• SharedPreferences是一个轻量级的存储类,特别适合用于 保存软件配置参数,例如用于登录时的用户名、密码、性别 等参数。SharedPreferences保存数据,其实质是用xml文件 存放数据,文件存放在/data/data/<package name>/shared_prefs目录下。
7.4.4更新数据
• SQLiteDatabase类中也提供了一个非常好用的update()方法, 用于对数据进行更新。这个方法接收四个参数,第一个参数 和insert()方法一样,也是表名,在这里指定去更新哪张表 里的数据;第二个参数是ContentValues对象,就是要把更 新数据在这里组装进去;第三、第四个参数用于约束更新某 一行或某几行中的数据,不指定的话就是默认更新所有行。
• implementation files('libs/litepal-1.6.1.jar')
• 则说明LitePal开源库加载成功。其中最后的1.6.1是版本号 的意思。
• (2)需要配置litepal.xml文件。右击app/src/main目录 →New→Directory,创建一个assets目录,然后在assets目 录下再新建一个litepal.xml文件,并编辑litepal.xml文件 中的内容如下。
资料搜集
• (1)创建一个Android应用程序,将下载的jar文件拷贝到 app/libs目录里,然后右键点击这个包,在弹出的菜单中选 择“Add As Library”选项,在弹出的对话框中点击“确定” 按钮即可。 打开app/build.gradle文件,在dependencies 闭包中看到自动添加了如下内容:
位置
类型+名称
1 String table 2 String[] columns
3 String selection 4 String[]
selectionArgs 5 String groupBy 6 String having 7 String orderBy
对应 SQL 部分
说明
from table_name select column1,column2 where column=value
7.4.2 升级数据库
• 当我们需要对数据库中的表进行删除或增加时,就可以使用 SQLiteOpenHelper帮助类中onUpgrade()方法。
7.4.3 添加数据
• 对数据的操作无非有四种,即CRUD,其中C代表添加 (Create),R代表查询(Retrieve),U代表更新 (Update),D代表删除(Delete)。Android提供了一系列 的辅助性方法,使得在Android中不去编写SQL语句,也能轻 松完成所有的CRUD操作。
• 外部存储就是指把文件存储到一些外部设备上,例如SD卡、 设备内的存储卡等,属于永久性存储方式。使用这种类型存 储的文件可以共享给其他的应用程序使用,也可以被删除、 修改、查看等,它不是一种安全的存储方式。
• 内部存储是指将应用程序的数据,以文件的形式存储在应用 程序的目录下(data/data/<packagename>/files)。这个 文件属于该应用程序私有,如果其他应用程序想要操作本应 用程序的文件,就需要设置权限。内部存储的文件随着应用 程序的卸载而删除,随着应用程序的生成而创建。
• 在使用SharedPreferences进行数据操作的基本步骤如下:
• (1)使用getSharedPreferences()方法获取一个 SharedPreferences实例对象。
• (2)使用SharedPreferences实例对象的edit()方法,获取 SharedPreferences.Editor编辑对象。
7.1 数据存储方式简介
• Android中五种不同数据存储方式: • 文件存储 • SharedPreferences存储 • SQLite数据库存储 • 网络存储 • ContentProvider
7.2 文件存储
• Android中的文件存储与Java中的文件存储类似,都是以I/O 流的形式把数据存储到文件中。不同点在于Android中的文 件存储分为外部存储和内部存储两种。
将指针移动到上一条数据上
获取集合的数据数量
返回指定属性名称的序号,如果属性不存在则产生异常
返回指定序号的属性名称
返回属性名称的字符串数组
根据属性名称返回序号
将指针移动到指定的数据上
返回当前指针的位置
7.5 LitePal操作数据库
• LitePal是一款开源的Android数据库框架,它采用了对象关 系映射(ORM)的模式,并将我们平时开发最常用到的一些 数据库功能进行了封装,使得不用编写一行SQL语句就可以 完成各种建表和增删改查的操作。
group by column having column=value order by column
指定查询的表名 指定查询的列明
指定 where 的约束条件 为 where 中的占位符提供具 体内容 分组方式 定义组的过滤器 指定查询结果的排序方式
方
法
moveToFirst()
moveToNext()
• SQLiteDatabase类中提供了一个insert()方法,这个方法就 是专门用于添加数据的,其返回值是新数据插入的位置,即 ID值。它接受三个参数:第一个参数指定需要添加数据的表 名;第二个参数用于在未指定添加数据的情况下给某些可为 空的列自动赋值NULL,直接传入null即可;第三个参数是一 个ContentValues对象,它提供了一系列的put()方法重载, 用于向ContentValues中添加数据,只需要将表中的每个列 名以及相应的待添加数据传入即可。