书签 分享 收藏 举报 版权申诉 / 26
上传文档赚钱

类型第07章Android中的数据存储3课件.ppt

  • 上传人(卖家):晟晟文业
  • 文档编号:4106466
  • 上传时间:2022-11-11
  • 格式:PPT
  • 页数:26
  • 大小:2.25MB
  • 【下载声明】
    1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
    2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
    3. 本页资料《第07章Android中的数据存储3课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
    4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
    5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
    配套讲稿:

    如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

    特殊限制:

    部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

    关 键  词:
    07 Android 中的 数据 存储 课件
    资源描述:

    1、第第7 7章章 AndroidAndroid中的数据存取中的数据存取 在Android平台上,嵌入了一个轻量级的关系型数据库SQLite。SQLite并没有包含大型客户/服务器数据库(如Oracle、SQL Server)的所有特性,但它包含了操作本地数据的所有功能,简单易用、反应快。SQLite内部只支持 NULL、INTEGER、REAL(浮点数)、TEXT(字符串文本)和BLOB(二进制对象)这五种数据类型,但实际上SQLite也接受varchar(n)、char(n)、decimal(p,s)等数据类型,只不过在运算或保存时会转成上面对应的数据类型。SQLite最大的特点是可以把各种类

    2、型的数据保存到任何字段中,而不用关心字段声明的数据类型是什么。例如:可以把字符串类型的值存入INTEGER类型字段中,或者在布尔型字段中存放数值类型等。但有一种情况例外:定义为INTEGER PRIMARY KEY的字段只能存储64位整数,当向这种字段保存除整数以外的数据时,将会产生错误。由于SQLite允许存入数据时忽略底层数据列实际的数据类型,因此SQLite在解析建表语句时,会忽略建表语句中跟在字段名后面的数据类型信息。create table person_tb(id integer primary key autoincrement,name varchar(20),因此在编写建表语

    3、句时可以省略数据列后面的类型声明。查询语句:select*from 表名 where 条件子句 group by 分组字句 having.order by 排序子句 如:select*from person分页SQL与mysql类似,下面SQL语句获取5条记录,跳过前面3条记录 select*from Account limit 5 offset 3 插入语句:insert into 表名(字段列表)values(值列表)。如:insert into person(name,age)values(张三,26)更新语句:update 表名 set 字段名=值 where 条件子句。如:updat

    4、e person set name=李四 where id=10删除语句:delete from 表名 where 条件子句。如:delete from person where id=10常见SQL标准语句7.3.1 SQLiteSQLite数据库简介数据库简介 SQLiteOpenHelper是Android提供的管理数据的工具类,主要用于数据库的创建、打开和版本更新。一般用法是创建SQLiteOpenHelper类的子类,并扩展它的onCreate()和onUpgrade()方法(这两个方法是抽象的,必须扩展),选择性的扩展它的onOpen()方法。SQLiteDatabase getR

    5、eadableDatabase():以读写的方式打开SQLiteDatabase对象,内部调用getWritableDatabase()方法;SQLiteDatabase getWritableDatabase():以写的方式打开SQLiteDatabase对象,一旦打开成功,将会缓存该数据库对象;abstract void onCreate(SQLiteDatabase db):当数据库第一次被创建的时候调用该方法;abstract void onUpgrade(SQLiteDatabase db,int oldVersion,int newVersion):当数据库需要更新的时候调用该方法

    6、;调用SQLiteOpenHelper的getWritableDatabase()或者getReadableDatabase()方法获取SQLiteDatabase实例,如果数据库不存在,Android系统会自动生成一个数据库,然后调用onCreate()方法,在onCreate()方法里生成数据库表结构及添加应用需要的初始化数据。onUpgrade()方法在数据库的版本发生变化时会被调用,一般在软件升级时才需改变版本号,数据库的版本是由开发人员控制的,假设数据库现在的版本是1,由于业务的变更,修改了数据库表结构,这时候就需要升级软件,升级软件时希望更新用户手机里的数据库表结构,为了实现这一目

    7、的,可以把数据库版本设置为2,并在onUpgrade()方法里实现表结构的更新。onUpgrade()方法可以根据原版本号和目标版本号进行判断,然后作出相应的表结构及数据更新。7.3.2 SQLiteSQLite数据库相关类数据库相关类 SQLiteDatabase是Android提供的代表数据库的类(底层就是一个数据库文件),该类封装了一些操作数据库的API,使用该类可以完成对数据进行添加(Create)、查询(Retrieve)、更新(Update)和删除(Delete)操作。对SQLiteDatabase的学习,应该重点掌握execSQL()和rawQuery()方法。execSQL()

    8、方法可以执行insert、delete、update和create table之类有更改行为的SQL语句;而rawQuery()方法用于执行select语句。execSQL(String sql,Object bindArgs):执行带占位符的SQL语句,如果sql语句中没有占位符,则第二个参数可传null;execSQL(String sql):执行SQL语句;rawQuery(String sql,String selectionArgs):执行带占位符的SQL查询。7.3.2 SQLiteSQLite数据库相关类数据库相关类 SQLiteDatabase还专门提供了对应于添加、删除、更新

    9、、查询的操作方法:insert()、delete()、update()和query()。例如:Cursor query(String table,String columns,String selection,String selectionArgs,String groupBy,String having,String orderBy,String limit)方法各参数的含义table:表名,如果是多表联合查询,可以用逗号将两个表名分开;columns:要查询的列名,可以是多列。selection:查询条件子句,相当于select语句where关键字后面的部分,在条件子句允许使用占位符“?

    10、”。selectionArgs:对应于selection语句中占位符的值,值在数组中的位置与占位符在语句中的位置必须一致,否则就会有异常。groupBy:相当于select语句group by关键字后面的部分having:相当于select语句having关键字后面的部分orderBy:相当于select语句order by关键字后面的部分,如:personid desc,age asc;limit:指定偏移量和获取的记录数,相当于select语句limit关键字后面的部分。Cursor接口主要用于存放查询记录的接口,Cursor是结果集游标,用于对结果集进行随机访问,如果熟悉JDBC,可发现

    11、Cursor与JDBC中的ResultSet作用很相似,提供了如下方法来移动查询结果的记录指针。move(int offset):将记录指针向上或向下移动指定的行数。offset为正数就向下移动,为负数就向上移动;moveToNext()方法可以将游标从当前记录移动到下一记录,如果已经移过了结果集的最后一条记录,返回结果为false,否则为true;moveToPrevious()方法用于将游标从当前记录移动到上一记录,如果已经移过了结果集的第一条记录,返回值为false,否则为true;moveToFirst()方法用于将游标移动到结果集的第一条记录,如果结果集为空,返回值为false,否则

    12、为true;moveToLast()方法用于将游标移动到结果集的最后一条记录,如果结果集为空,返回值为false,否则为true。7.3.2 SQLiteSQLite数据库相关类数据库相关类使用SQLiteDatabase进行数据库操作的步骤如下:获取SQLiteDatabase对象,它代表了与数据库的连接;调用SQLiteDatabase的方法来执行SQL语句;操作SQL语句的执行结果;关闭SQLiteDatabase,回收资源。7.3.2 SQLiteSQLite数据库相关类数据库相关类 该程序实现备忘录功能,用于记录生活中一些重要事情,并提供查询功能,可按条件进行模糊查询。可输入主题、相

    13、关内容以及选择时间,单击添加按钮时,会将相关数据写入数据库,单击查询按钮时,会根据主题、内容以及时间进行精确和模糊查询。7.3.2备忘录实例备忘录实例程序清单:Mementoreslayoutactivity_main.xml 垂直线性布局表格布局,3行2列左边距10dp显示主题标签文本大小为20sp输入主题的文本编辑框7.3.2备忘录实例备忘录实例 程序清单:Mementoreslayoutactivity_main.xml7.3.2备忘录实例备忘录实例 程序清单:Mementoreslayoutactivity_main.xml7.3.2备忘录实例备忘录实例程序清单:Mementoresl

    14、ayoutactivity_main.xml 需要动态设置属性,所以添加ID水平线性布局引用定制好的样式设置TextView的宽度将颜色设置为黑色7.3.2备忘录实例备忘录实例 程序清单:Mementoreslayoutactivity_main.xml此布局使用了样式,程序清单:Mementoresvaluesstyles.xml wrap_content center_horizontal 18sp#0000ff 7.3.2备忘录实例备忘录实例 下面为添加和查询两个按钮添加事件处理,所有的数据都已具备,如何将数据写入数据库了,首先写一个自己的数据库工具类,该类继承于SQLiteOpenHe

    15、lper,并重写它的onCreate()和onUpdate()方法,数据库创建时,会调用onCreate()方法,因此,我们将建表语句放在里面,详细代码如下:public class MyDatabaseHelper extends SQLiteOpenHelper final String CREATE_TABLE_SQL=create table memento_tb(_id integer primary +key autoincrement,subject,body,date);public MyDatabaseHelper(Context context,String name,Cu

    16、rsorFactory factory,int version)super(context,name,factory,version);public void onCreate(SQLiteDatabase db)db.execSQL(CREATE_TABLE_SQL);public void onUpgrade(SQLiteDatabase db,int oldVersion,int newVersion)System.out.println(-+oldVersion+-+newVersion);创建memento表的SQL语句构造方法执行建表语句,创建memento表程序清单:Mement

    17、osrcietjxufecnandroidMyDatabaseHelper.java7.3.2备忘录实例备忘录实例 然后通过该工具类,获取数据库,并进行添加和查询操作,关键代码如下:程序清单:MementosrcietjxufecnandroidMainActivity.java private class MyOnClickListerner implements OnClickListener public void onClick(View v)mydbHelper=new MyDatabaseHelper(MainActivity.this,memento.db,null,1);SQL

    18、iteDatabase db=mydbHelper.getReadableDatabase();String subStr=subject.getText().toString();String bodyStr=body.getText().toString();String dateStr=date.getText().toString();switch(v.getId()case R.id.add:title.setVisibility(View.INVISIBLE);addMemento(db,subStr,bodyStr,dateStr);Toast.makeText(MainActi

    19、vity.this,添加备忘录成功!,1000).show();result.setAdapter(null);break;创建数据库辅助类获取SQLite数据库获取主题编辑框的内容 获取内容编辑框的内容 获取时间编辑框的内容 单击的是添加按钮 设置表头不可见 调用添加记录方法下拉列表内容为空7.3.2备忘录实例备忘录实例程序清单:MementosrcietjxufecnandroidMainActivity.java case R.id.query:title.setVisibility(View.VISIBLE);Cursor cursor=queryMemento(db,subStr,b

    20、odyStr,dateStr);SimpleCursorAdapter resultAdapter=new SimpleCursorAdapter(MainActivity.this,R.layout.result,cursor,new String _id,subject,body,date,new int R.id.memento_num,R.id.memento_subject,R.id.memento_body,R.id.memento_date);result.setAdapter(resultAdapter);break;default:break;单击的是查询按钮设置表头可见调用

    21、查询方法将查询结果显示在下拉列表 中,注意一 一对应单击的是查询按钮7.3.2备忘录实例备忘录实例程序清单:MementosrcietjxufecnandroidMainActivity.java向数据库中插入和查询记录的方法如下。public void addMemento(SQLiteDatabase db,String subject,String body,String date)db.execSQL(insert into memento_tb values(null,?,?,?),new String subject,body,date);this.subject.setText(

    22、);this.body.setText();this.date.setText();public Cursor queryMemento(SQLiteDatabase db,String subject,String body,String date)Cursor cursor=db.rawQuery(select*from memento_tb where subject like?and body like?and date like?,new String%+subject+%,%+body+%,%+date+%);return cursor;执行插入操作添加数据后,将所有的文本编辑框的

    23、内容设为空执行查询操作,提供模糊查询功能7.3.2备忘录实例备忘录实例事件监听器写好后,为按钮注册单击事件处理器,代码如下:MyOnClickListerner myOnClickListerner=new MyOnClickListerner();add.setOnClickListener(myOnClickListerner);query.setOnClickListener(myOnClickListerner);程序清单:MementosrcietjxufecnandroidMainActivity.java程序清单:MementosrcietjxufecnandroidMainAc

    24、tivity.javaprotected void onDestroy()if(mydbHelper!=null)mydbHelper.close();操作完成后,在结束Activity前关闭数据库,代码如下:7.3.2备忘录实例备忘录实例 当程序第一次调用getReadableDatabase()方法后,SQLiteOpenHelpery会缓存已创建的SQLiteDatabase实例,多次调用getReadableDatabase()方法得到的都是同一个SQLitedatabase实例,即正常情况下,SQLiteDatebase实例会维持数据库的打开状态,因此在结束前应关闭数据库,否则会占用

    25、内存。在上面程序中,我们使用了SimpleCursorAdapter封装Cursor,从而在下拉列表中显示结果记录信息,这里需注意,SimpleCursorAdapter封装Cursor时要求底层数据表的主键名为-id,因为SimpleCursorAdapter只能识别列名为-id的主键,否则会出现java.lang.IllegalArgumentException:column-id does not exist错误。程序运行后,打开DDMS视图,查看File Explorer 面板,发现在我们应用程序的包下,生成了一个databases文件夹,下面有一个memento.db文件,如图,该文

    26、件就是我们在程序中创建的数据库文件。数据库文件位于datadata你的程序的包名databases中,可通过DDMS工具将该文件夹下的数据库导出来,然后下载具体的图形化界面进行查看。7.3.2备忘录实例备忘录实例文本 Android为我们提供了一个相应的命令行工具查看SQLite数据库。进入到数据库所在目录(导出的文件所放文件夹):sqlite3 数据库名 进入到该数据库然后即可利用sql语句查找相关信息。注意:通过命令行查看数据库内容时,中文在命令行上会显示乱码 7.3.2备忘录实例备忘录实例(Android系统在调用SQLiteOpenHelper的getReadableDatabase()方法时会判断系统中是否已存在数据库,如果不存在,系统会创建数据库文件,因此查找记录时不会出错,只不过查询结果为空。但若我们在创建数据库时,没有指定表结构,添加或查询时会出错)1、数据库的创建过程是怎么样的?当不存在数据库时,直接查找记录会不会出错?2、数据库的后缀名有要求吗?(后缀名可任意)7.3.2备忘录实例备忘录实例

    展开阅读全文
    提示  163文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    关于本文
    本文标题:第07章Android中的数据存储3课件.ppt
    链接地址:https://www.163wenku.com/p-4106466.html

    Copyright@ 2017-2037 Www.163WenKu.Com  网站版权所有  |  资源地图   
    IPC备案号:蜀ICP备2021032737号  | 川公网安备 51099002000191号


    侵权投诉QQ:3464097650  资料上传QQ:3464097650
       


    【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。

    163文库