第07章Android中的数据存储3课件

PPT
  • 阅读 114 次
  • 下载 0 次
  • 页数 26 页
  • 大小 3.527 MB
  • 2022-12-05 上传
  • 收藏
  • 违规举报
  • © 版权认领
下载文档15.00 元 加入VIP免费下载
此文档由【小橙橙】提供上传,收益归文档提供者,本网站只提供存储服务。若此文档侵犯了您的版权,欢迎进行违规举报版权认领
第07章Android中的数据存储3课件
可在后台配置第一页与第二页中间广告代码
第07章Android中的数据存储3课件
可在后台配置第二页与第三页中间广告代码
第07章Android中的数据存储3课件
可在后台配置第三页与第四页中间广告代码
第07章Android中的数据存储3课件
第07章Android中的数据存储3课件
还剩10页未读,继续阅读
【这是免费文档,您可以免费阅读】
/ 26
  • 收藏
  • 违规举报
  • © 版权认领
下载文档15.00 元 加入VIP免费下载
文本内容

【文档说明】第07章Android中的数据存储3课件.ppt,共(26)页,3.527 MB,由小橙橙上传

转载请保留链接:https://www.ichengzhen.cn/view-92619.html

以下为本文档部分文字说明:

第7章Android中的数据存取7.3SQLITE数据库在Android平台上,嵌入了一个轻量级的关系型数据库-SQLite。SQLite并没有包含大型客户/服务器数据库(如Oracle、SQLServer)

的所有特性,但它包含了操作本地数据的所有功能,简单易用、反应快。SQLite内部只支持NULL、INTEGER、REAL(浮点数)、TEXT(字符串文本)和BLOB(二进制对象)这五种数据类型,但实际上SQLite也接受varchar(n)、

char(n)、decimal(p,s)等数据类型,只不过在运算或保存时会转成上面对应的数据类型。7.3.1SQLITE数据库简介SQLite最大的特点是可以把各种类型的数据保存到任何字段中,而不用关心字段声明的数据类型是什么。例如:可以把字符

串类型的值存入INTEGER类型字段中,或者在布尔型字段中存放数值类型等。但有一种情况例外:定义为INTEGERPRIMARYKEY的字段只能存储64位整数,当向这种字段保存除整数以外的数据时,将会产生错误。由于SQLite允许存入数据时忽略底层数据列实际的数据类型

,因此SQLite在解析建表语句时,会忽略建表语句中跟在字段名后面的数据类型信息。createtableperson_tb(idintegerprimarykeyautoincrement,namevarchar(20)),因此在编写建表语句时可以省略数据列后面的

类型声明。查询语句:select*from表名where条件子句groupby分组字句having...orderby排序子句如:select*fromperson分页SQL与mysql类似,下面SQL语句获取

5条记录,跳过前面3条记录select*fromAccountlimit5offset3插入语句:insertinto表名(字段列表)values(值列表)。如:insertintoperson(name,

age)values(‘张三’,26)更新语句:update表名set字段名=值where条件子句。如:updatepersonsetname=‘李四‘whereid=10删除语句:deletefrom表名whe

re条件子句。如:deletefrompersonwhereid=10常见SQL标准语句7.3.1SQLite数据库简介7.3.2SQLITE数据库相关类SQLiteOpenHelper是Android提供的管理数据的工具类,主要用于数据库的创建、打开和版本更新。一般用法是创建SQLiteOp

enHelper类的子类,并扩展它的onCreate()和onUpgrade()方法(这两个方法是抽象的,必须扩展),选择性的扩展它的onOpen()方法。SQLiteDatabasegetReadableDatabase()

:以读写的方式打开SQLiteDatabase对象,内部调用getWritableDatabase()方法;SQLiteDatabasegetWritableDatabase():以写的方式打开SQLiteDatabase对象,一旦打开成功

,将会缓存该数据库对象;abstractvoidonCreate(SQLiteDatabasedb):当数据库第一次被创建的时候调用该方法;abstractvoidonUpgrade(SQLiteDataba

sedb,intoldVersion,intnewVersion):当数据库需要更新的时候调用该方法;调用SQLiteOpenHelper的getWritableDatabase()或者getReadableDatabase()方法

获取SQLiteDatabase实例,如果数据库不存在,Android系统会自动生成一个数据库,然后调用onCreate()方法,在onCreate()方法里生成数据库表结构及添加应用需要的初始化数据。onUpgrade()方法在数据库的版本发生变化时会被调用,

一般在软件升级时才需改变版本号,数据库的版本是由开发人员控制的,假设数据库现在的版本是1,由于业务的变更,修改了数据库表结构,这时候就需要升级软件,升级软件时希望更新用户手机里的数据库表结构,为了实现这一目的,可

以把数据库版本设置为2,并在onUpgrade()方法里实现表结构的更新。onUpgrade()方法可以根据原版本号和目标版本号进行判断,然后作出相应的表结构及数据更新。7.3.2SQLite数据库相关类SQLiteDatabase是Android提供的代表数据库的类(底层就是一个数据库文件),该

类封装了一些操作数据库的API,使用该类可以完成对数据进行添加(Create)、查询(Retrieve)、更新(Update)和删除(Delete)操作。对SQLiteDatabase的学习,应该重点掌握execSQL()和

rawQuery()方法。execSQL()方法可以执行insert、delete、update和createtable之类有更改行为的SQL语句;而rawQuery()方法用于执行select语句。execSQL(Stringsql,Object[]bindArgs):执行带占位符

的SQL语句,如果sql语句中没有占位符,则第二个参数可传null;execSQL(Stringsql):执行SQL语句;rawQuery(Stringsql,String[]selectionArg

s):执行带占位符的SQL查询。7.3.2SQLite数据库相关类SQLITE数据库存储数据SQLiteDatabase还专门提供了对应于添加、删除、更新、查询的操作方法:insert()、delete()、update()和query()。例如:Cursorq

uery(Stringtable,String[]columns,Stringselection,String[]selectionArgs,StringgroupBy,Stringhaving,StringorderBy,String

limit)方法各参数的含义table:表名,如果是多表联合查询,可以用逗号将两个表名分开;columns:要查询的列名,可以是多列。selection:查询条件子句,相当于select语句where关键字后面的部分,在条

件子句允许使用占位符‚?‛。selectionArgs:对应于selection语句中占位符的值,值在数组中的位置与占位符在语句中的位置必须一致,否则就会有异常。groupBy:相当于select语句groupby关键字后面的部分havi

ng:相当于select语句having关键字后面的部分orderBy:相当于select语句orderby关键字后面的部分,如:personiddesc,ageasc;limit:指定偏移量和获取的记

录数,相当于select语句limit关键字后面的部分。Cursor接口主要用于存放查询记录的接口,Cursor是结果集游标,用于对结果集进行随机访问,如果熟悉JDBC,可发现Cursor与JDBC中的ResultSet作用很相似,提供了如下方法来移动查

询结果的记录指针。move(intoffset):将记录指针向上或向下移动指定的行数。offset为正数就向下移动,为负数就向上移动;moveToNext()方法可以将游标从当前记录移动到下一记录,如果已经移过

了结果集的最后一条记录,返回结果为false,否则为true;moveToPrevious()方法用于将游标从当前记录移动到上一记录,如果已经移过了结果集的第一条记录,返回值为false,否则为true;mo

veToFirst()方法用于将游标移动到结果集的第一条记录,如果结果集为空,返回值为false,否则为true;moveToLast()方法用于将游标移动到结果集的最后一条记录,如果结果集为空,返回值为false,否则为true。7.3.2SQLite

数据库相关类使用SQLiteDatabase进行数据库操作的步骤如下:获取SQLiteDatabase对象,它代表了与数据库的连接;调用SQLiteDatabase的方法来执行SQL语句;操作SQL语句的执行结果;关闭SQLiteDa

tabase,回收资源。7.3.2SQLite数据库相关类7.3.3备忘录实例该程序实现备忘录功能,用于记录生活中一些重要事情,并提供查询功能,可按条件进行模糊查询。可输入主题、相关内容以及选择时间,单击添加按钮时,会将相关数据写入数据库,单击查询按钮时,会根据主题、内容以及时间进行精确和模糊查询

。7.3.2备忘录实例程序清单:Memento\res\layout\activity_main.xml<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/andr

oid"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_paren

t"android:orientation="vertical"><TableLayoutandroid:layout_width="match_parent"android:layout_height="wrap_c

ontent"><TableRow><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginLeft="10dp"android

:text="@string/subject"android:textSize="20sp"/><EditTextandroid:id="@+id/subject"android:layout_width="match_parent"android:layout_he

ight="wrap_content"/></TableRow>→垂直线性布局→表格布局,3行2列→左边距10dp→显示主题标签→文本大小为20sp→输入主题的文本编辑框7.3.2备忘录实例<TableRow><TextViewandroid:layout_width="wrap_conten

t"android:layout_height="wrap_content"android:layout_marginLeft="10dp"android:text="@string/body"android:textSize="20sp"/><EditTextandroid:i

d="@+id/body"android:layout_width="match_parent"android:layout_height="wrap_content"android:minLines="4"/><

/TableRow><TableRow><Buttonandroid:id="@+id/chooseDate"android:layout_width="wrap_content"android:layout_height="wrap_content"android:te

xt="@string/chooseDate"/>程序清单:Memento\res\layout\activity_main.xml7.3.2备忘录实例<EditTextandroid:id="@+id/

date"android:layout_width="200dp"android:layout_height="wrap_content"android:editable="false"/></TableRow></TableLayout><L

inearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:gravity="center_horizontal">

<Buttonandroid:id="@+id/add"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@string/add"/><Buttonandroid:id="

@+id/query"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@string/query"/></LinearLayout>程序清单:Memento\res\

layout\activity_main.xml7.3.2备忘录实例程序清单:Memento\res\layout\activity_main.xml<LinearLayoutandroid:id="@+id/title"android:layout_width="ma

tch_parent"android:layout_height="wrap_content"android:orientation="horizontal"><TextViewstyle="@style/TextView"android

:layout_width="40dp"android:text="@string/num"android:textColor="#000000"/><TextViewstyle="@style/TextView"android:layout_width="50dp

"android:text="@string/subject"android:textColor="#000000"/><TextViewstyle="@style/TextView"android:layout_width="110dp"android:text="@string/b

ody"android:textColor="#000000"/>→需要动态设置属性,所以添加ID→水平线性布局→引用定制好的样式→设置TextView的宽度→将颜色设置为黑色7.3.2备忘录实例<TextViewstyle="@style/Text

View"android:layout_width="100dp"android:text="@string/date"android:textColor="#000000"/></LinearLayou

t><ListViewandroid:id="@+id/result"android:layout_width="wrap_content"android:layout_height="wrap_content"/></Line

arLayout>程序清单:Memento\res\layout\activity_main.xml此布局使用了样式,程序清单:Memento\res\values\styles.xml<resourcesxmlns:android="http://schemas.android.c

om/apk/res/android"><stylename="AppTheme"parent="android:Theme.Light"/><stylename="TextView"><itemname="android:layo

ut_height">wrap_content</item><itemname="android:gravity">center_horizontal</item><itemname="android:textSize">18sp</item><itemname="and

roid:textColor">#0000ff</item></style></resources>7.3.2备忘录实例下面为添加和查询两个按钮添加事件处理,所有的数据都已具备,如何将数据写入数据库了,首先写

一个自己的数据库工具类,该类继承于SQLiteOpenHelper,并重写它的onCreate()和onUpdate()方法,数据库创建时,会调用onCreate()方法,因此,我们将建表语句放在里面,详细代码如下:publicclassMyDatabaseHelperextendsSQL

iteOpenHelper{finalStringCREATE_TABLE_SQL="createtablememento_tb(_idintegerprimary"+"keyautoincrement,subject,body,date)";p

ublicMyDatabaseHelper(Contextcontext,Stringname,CursorFactoryfactory,intversion){super(context,name,factory,version);}publicvoidonCreate(SQLi

teDatabasedb){db.execSQL(CREATE_TABLE_SQL);}publicvoidonUpgrade(SQLiteDatabasedb,intoldVersion,intnewVersion){Sys

tem.out.println("---------"+oldVersion+"------->"+newVersion);}}→创建memento表的SQL语句→构造方法→执行建表语句,创建memento表程序清单:Mement

o\src\iet\jxufe\cn\android\MyDatabaseHelper.java7.3.2备忘录实例然后通过该工具类,获取数据库,并进行添加和查询操作,关键代码如下:程序清单:Memento\src\iet\jxufe\cn\android\Mai

nActivity.javaprivateclassMyOnClickListernerimplementsOnClickListener{publicvoidonClick(Viewv){mydbHelper=newMyData

baseHelper(MainActivity.this,"memento.db",null,1);SQLiteDatabasedb=mydbHelper.getReadableDatabase();StringsubStr=subject.getText

().toString();StringbodyStr=body.getText().toString();StringdateStr=date.getText().toString();switch(v.getId()){caseR.id.a

dd:title.setVisibility(View.INVISIBLE);addMemento(db,subStr,bodyStr,dateStr);Toast.makeText(MainActivity.this,"

添加备忘录成功!",1000).show();result.setAdapter(null);break;→创建数据库辅助类→获取SQLite数据库→获取主题编辑框的内容→获取内容编辑框的内容→获取时间编辑框的内容→单击的是添加按钮→设置

表头不可见→调用添加记录方法→下拉列表内容为空7.3.2备忘录实例程序清单:Memento\src\iet\jxufe\cn\android\MainActivity.javacaseR.id.query:title.setVisibility(View.VISIBLE);Cu

rsorcursor=queryMemento(db,subStr,bodyStr,dateStr);SimpleCursorAdapterresultAdapter=newSimpleCursorAdapter(MainActivity.this,R.layou

t.result,cursor,newString[]{"_id","subject","body","date"},newint[]{R.id.memento_num,R.id.memento_subject,

R.id.memento_body,R.id.memento_date});result.setAdapter(resultAdapter);break;default:break;}}}→单击的是查询按钮→设置表头可见→调

用查询方法→将查询结果显示在下拉列表中,注意一一对应→单击的是查询按钮7.3.2备忘录实例程序清单:Memento\src\iet\jxufe\cn\android\MainActivity.java向数据库中插入和查询记录的方法如下。publicvoidaddMe

mento(SQLiteDatabasedb,Stringsubject,Stringbody,Stringdate){db.execSQL("insertintomemento_tbvalues(n

ull,?,?,?)",newString[]{subject,body,date});this.subject.setText("");this.body.setText("");this.date.setText("");}publicCursorqueryMemento

(SQLiteDatabasedb,Stringsubject,Stringbody,Stringdate){Cursorcursor=db.rawQuery("select*frommemento_tbwheresubjectlike?andbodylike?anddatelike?",new

String[]{"%"+subject+"%","%"+body+"%","%"+date+"%"});returncursor;}→执行插入操作→添加数据后,将所有的文本编辑框的内容设为空→执行查询操作,提供模糊查询功能7.3.2备忘录实

例事件监听器写好后,为按钮注册单击事件处理器,代码如下:MyOnClickListernermyOnClickListerner=newMyOnClickListerner();add.setOnClickListener(myOnClick

Listerner);query.setOnClickListener(myOnClickListerner);程序清单:Memento\src\iet\jxufe\cn\android\MainActivity.java程序清单:Memento\src\iet\jxufe\cn\android\

MainActivity.javaprotectedvoidonDestroy(){if(mydbHelper!=null){mydbHelper.close();}}操作完成后,在结束Activity前关闭数据库,代码如下:7.3.

2备忘录实例当程序第一次调用getReadableDatabase()方法后,SQLiteOpenHelpery会缓存已创建的SQLiteDatabase实例,多次调用getReadableDatabase()方法得到的都是同一个SQL

itedatabase实例,即正常情况下,SQLiteDatebase实例会维持数据库的打开状态,因此在结束前应关闭数据库,否则会占用内存。在上面程序中,我们使用了SimpleCursorAdapter封装Cursor,从而在下拉列表中显示结果记录信息,

这里需注意,SimpleCursorAdapter封装Cursor时要求底层数据表的主键名为-id,因为SimpleCursorAdapter只能识别列名为-id的主键,否则会出现java.lang.IllegalArgumentException:column'-id'does

notexist错误。程序运行后,打开DDMS视图,查看FileExplorer面板,发现在我们应用程序的包下,生成了一个databases文件夹,下面有一个memento.db文件,如图,该文件就是我们在

程序中创建的数据库文件。数据库文件位于\data\data\你的程序的包名\databases\中,可通过DDMS工具将该文件夹下的数据库导出来,然后下载具体的图形化界面进行查看。7.3.2备忘录实例文本Android为我们提供了一个相应的命令行工

具查看SQLite数据库。进入到数据库所在目录(导出的文件所放文件夹):sqlite3数据库名进入到该数据库然后即可利用sql语句查找相关信息。注意:通过命令行查看数据库内容时,中文在命令行上会显示乱码7.3.2备忘录实例(Android系统在调用SQLiteOpen

Helper的getReadableDatabase()方法时会判断系统中是否已存在数据库,如果不存在,系统会创建数据库文件,因此查找记录时不会出错,只不过查询结果为空。但若我们在创建数据库时,没有指定表结构,添加或查询时会出错)1、数据库的创建过程是怎么样的?当不存在

数据库时,直接查找记录会不会出错?2、数据库的后缀名有要求吗?(后缀名可任意)7.3.2备忘录实例

小橙橙
小橙橙
文档分享,欢迎浏览!
  • 文档 25747
  • 被下载 7
  • 被收藏 0
相关资源
广告代码123
若发现您的权益受到侵害,请立即联系客服,我们会尽快为您处理。侵权客服QQ:395972555 (支持时间:9:00-21:00) 公众号
Powered by 太赞文库
×
确认删除?