




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
子任务3:TopTen功能任务六项目流程任务简介任务分析支撑知识任务实施任务小结扩展训练SQLite数据库了解Android自带的SQLite数据库1任务简介任务分析支撑知识任务实施任务小结扩展训练SQLite是一款轻量级的数据库,设计SQLite的初衷就满足是嵌入式产品的需求,由于嵌入式产品的资源有限,所以要求数据库占用资源非常低。SQLite做到了这一点,它是目前嵌入式设备中较常见的数据库之一,只需要占用很少的内存,另外SQLite支持SQL语句。Android为每个应用程序都安排了固定的数据库存放目录,即应用程序所在目录(/data/data/包名)下的databases目录。
1.1简介应用程序数据库存放的目录/data/data/包名/databases首先打开AndroidStudio的Terminal窗口,输入adbshell命令。如果输入该命令后,键入回车出现如下的错误提示,请先运行Android虚拟机:C:\code\new\SnakeGame>adbshellerror:nodevices/emulatorsfoundAndroid虚拟机运行正常后,再次输入命令会提示成功登录:C:\code\new\SnakeGame>adbshellgeneric_x86:/$1.2实践操作切换到管理员:2|generic_x86:/$sugeneric_x86:/#跳转到APP的目录:generic_x86:/#cd/data/data/com.example.administrator.test打开数据库“testdb”:generic_x86:/data/data/com.example.administrator.test#sqlite3testdbSQLiteversion3.22.02018-01-2218:45:57Enter".help"forusagehints.sqlite>1.2实践操作创建数据表table_testsqlite>createtabletable_test(idINTEGERNOTNULLPRIMARYKEY,nameTEXT);插入两条记录sqlite>insertintotable_testvalues(null,'tom');sqlite>insertintotable_testvalues(null,'jack');查询记录sqlite>select*fromtable_test;1|tom2|jack更新记录sqlite>updatetable_testsetname='jovi'wherename='jack';删除记录sqlite>deletefromtable_testwhereid=1;1.2实践操作查询数据库中所有的数据表sqlite>.tablestable_test查看某张表格的创建语句sqlite>.schematable_testCREATETABLEtable_test(idINTEGERNOTNULLPRIMARYKEY,nameTEXT);退出SQLite环境sqlite>.exit1.2实践操作SQLiteOpenHelper和SQLiteDatabase了解如何使用Android提供的类进行数据库操作2任务简介任务分析支撑知识任务实施任务小结扩展训练通过SQL语句可以手动操作SQLite数据库,但是程序员是需要编写代码来操作数据库的,Android为我们提供了SQLiteOpenHelper类和SQLiteDatabase类。SQLiteOpenHelper是一个抽象类,来管理数据库的创建和版本的升级(onCreate和onUpgrade),操作数据库需要继承自该类。SQLiteDatabase类就是用来操作数据库的类。2.1简介2.1简介SQLiteOpenHelperonCreate方法onUpdate方法SQLiteDatabase/data/data/包名/databases/SQLite数据库文件数据库文件不存在或者版本过旧创建或升级数据库方法publicSQLiteOpenHelper(Contextcontext,Stringname,SQLiteDatabase.CursorFactoryfactory,intversion)功能数据库的构造方法。参数context为使用该数据库的环境变量;name为数据库名;factory用于创建游标的对象,默认使用null即可;version为数据库的版本号。返回值无2.2SQLiteOpenHelper重要方法方法publicabstractvoidonCreate(SQLiteDatabasedb)功能创建SQLiteOpenHelper对象时,会通过参数传入数据库名。当程序调用getWritableDatabase或getReadableDatabase方法时,系统检查该数据库文件是否存在,如果不存在就会触发onCreate方法,该方法中需要编写数据库创建的代码。参数db为数据库对象。返回值无2.2SQLiteOpenHelper重要方法方法publicabstractvoidonUpgrade(SQLiteDatabasedb,intoldVersion,intnewVersion)功能创建SQLiteOpenHelper对象时,会通过参数传入版本号。当程序调用getWritableDatabase方法或getReadableDatabase方法时,希望会该检查版本号是否高于数据库文件的版本号,如果是系统会触发onUpgrade方法,该方法中一般编写数据库升级的代码。参数db为数据库对象,oldVersion为旧版本号,newVersion为新版本号。返回值无2.2SQLiteOpenHelper重要方法方法publicSQLiteDatabasegetWritableDatabase()功能获得一个可以读写的数据库对象。如果第一次调用该方法,会去打开数据库,如果发现数据库不存在或者版本过旧,会触发onCreate或onUpgrade方法。参数无返回值数据库对象2.2SQLiteOpenHelper重要方法方法publicSQLiteDatabasegetReadableDatabase()功能获取一个只读的数据库对象。如果第一次调用该方法,会去打开数据库,如果发现数据库不存在或者版本过旧,会触发onCreate或onUpgrade方法。参数无返回值数据库对象2.2SQLiteOpenHelper重要方法方法publicvoidexecSQL(Stringsql,Object[]bindArgs)功能执行SQL语句(不包含返回数据的SQL语句,如不可以为SELECT语句)。参数sql为SQL语句字符串;bindArgs为SQL语句中占位符参数的值。返回值无SQLiteDatabasedb=openHelper.getWritableDatabase();Stringname="Nelson";//向table_person表中插入一条记录("Nelson","Canada")db.execSQL("insertintotable_personvalues(?,?);",newString[]{name,"Canada"});db.close();2.3SQLiteDatabase重要方法方法publiclonginsert(Stringtable,StringnullColumnHack,ContentValuesvalues)功能向表格中插入数据。参数table为数据表的名称;nullColumnHack是插入空行时指定的列名,建议输入null即可;values为ContentValues类型,类似于map,通过键值对的形式存储将要插入的数据。返回值无ContentValuesvalues=newContentValues();values.put("name”,"Nelson"); //name字段的值为Nelsonvalues.put("address”,"Canada"); //address字段的值为CanadaSQLiteDatabasedb=openHelper.getWritableDatabase();db.insert("table_person",null,values); //向table_person表中插入一条记录db.close();2.3SQLiteDatabase重要方法方法publicintdelete(Stringtable,StringwhereClause,String[]whereArgs)功能从表格中删除数据。参数table为数据表的名称;whereClause为SQL语句DELETE中的WHERE语句;whereArgs为WHERE语句中占位符参数的值。返回值无SQLiteDatabasedb=openHelper.getWritableDatabase();//从table_person表格中删除name为“Nelson”的记录db.delete("table_person","name=?",newString[]{"Nelson"});db.close();2.3SQLiteDatabase重要方法方法publicintupdate(Stringtable,ContentValuesvalues,StringwhereClause,String[]whereArgs)功能更新表格中某条记录。参数table为数据表的名称;values为ContentValues类型,类似于map,通过键值对的形式存储将要更新的数据;whereClause为SQL语句UPDATE中的WHERE语句;whereArgs为WHERE语句中占位符参数的值。返回值无ContentValuesvalues=newContentValues();values.put("address","China"); SQLiteDatabasedb=helper.getWritableDatabase();
db.update("table_person",values,"name=?",newString[]{"Nelson"});db.close();2.3SQLiteDatabase重要方法方法publicCursorrawQuery(Stringsql,String[]selectionArgs)功能查询数据。参数sql为SELECT语句;selectionArgs为SELECT语句中占位符参数的值。返回值SELECT语句执行返回的数据集,通过Cursor可以在访问数据集的每一行以及每列数据。SQLiteDatabasedb=openHelper.getReadableDatabase();Cursorcursor=db.rawQuery("select*fromtable_person",null);db.close();2.3SQLiteDatabase重要方法Cursor游标了解如何使用Cursor查找数据库数据3任务简介任务分析支撑知识任务实施任务小结扩展训练Cursor类似于一个指针,指向返回的数据集,我们可以将数据集想象为一张表,通过Cursor的移动可以访问表格中的上一行或者下一行,定位到某一行后可以获取某列的数据。3.1简介方法作用booleanmoveToFirst()将游标指向数据集的第一行booleanmoveToLast()将游标指向数据集的最后一行booleanmoveToNext()将游标指向数据集的下一行booleanmoveToPosition(intposition)将游标指向数据集的某一行intgetCount()获得数据集的总行数SQLiteDatabasedb=openHelper.getReadableDatabase();Cursorcursor=db.rawQuery("selectname,addressfromtable_personwhereaddress=?",newString[]{"USA"});3.2方法方法作用intgetColumnIndex(StringcolumnName)根据列名获得该列在数据列中的序号intgetInt(intcolumnIndex)返回游标指向当前行中某列的整数值floatgetFloat(intcolumnIndex)返回游标指向当前行中某列的浮点值StringgetString(intcolumnIndex)返回游标指向当前行中某列的字符串值3.2方法使用范例掌握一个简单的SQLite应用实例4任务简介任务分析支撑知识任务实施任务小结扩展训练使用范例主界面布局;ListView每一项的布局;增加学生对话框布局;更新学生对话框布局。4.1
布局设计创建一个类StudentOpenHelper,该类继承自SQLiteOpenHelper;重写onCreate和onUpgrade方法。4.2创建SQLiteOpenHelper类为组件声明成员变量;数据库对象;用于ListView组件绑定数据的对象。4.3创建成员变量设计了一个updateListView方法,该方法将查询数据表获得所有数据,显示到ListView上;完成MainActivity类的onCreate方法,打开数据库进行数据显示。4.4实现数据库的查询和显示监听【Add】按钮,弹出对话框,点击【确定】后,根据对话框的信息插入数据;监听【Delete】按钮,弹出对话框,点击【确定】后,根据对话框的信息删除数据;监听【Update】按钮,弹出对话框,点击【确定】后,根据对话框的信息更新数据。4.5实现数据的插入、删除、更新项目流程任务简介任务分析支撑知识任务实施任务小结扩展训练子任务分析了解TopTen功能的实现要点1任务简介任务分析支撑知识任务实施任务小结扩展训练演示TopTen功能,需要我们思考几个问题。数据库如何设计?什么时候需要从数据库中读取数据?什么时候需要向数据库中写入数据?1.1游戏演示字段类型含义idINTEGER,非空,主键唯一标识nameTEXT玩家姓名scoreInteger玩家分数1.2数据库设计布局设计实现TopTen功能的多个布局文件2任务简介任务分析支撑知识任务实施任务小结扩展训练我们需要添加多个布局,用于对应不同的功能:自定义对话框的布局dialoglayout.xml:用于输入玩家姓名;积分榜Activity布局activity_score.xml:用于显示TopTen信息,由于TopTen上方包括一个表头,下方是一个ListView;ListView的Item布局listitemlayout.xml:ListView的每项需要显示排名、分数、姓名,需要创建一个ListView的Item布局,为了显示美观,使用android:layout_weight属性使布局中三个TextView宽度相同。同时该布局可以复用为积分榜的表头。2.1
布局设计垂直LinearLayout水平线性布局水平线性布局组件1组件2组件3Li
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 提高市场竞争力的工作策略计划
- 阁楼漏雨施工方案
- 吊绳涂料施工方案
- 电子商务平台建设与运营管理指南
- 国际关系学科知识点讲解与习题
- 物流运输管理与优化作业指导
- 城墙砖施工方案
- 车载视频施工方案
- 建筑结构设计与抗震知识点
- 现代农业科技成果转化实施方案
- 医学资料 医院感染管理基本知识培训 学习课件
- 2025年山东高速集团总部部分业务技术岗位内部选聘9人自考难、易点模拟试卷(共500题附带答案详解)
- 世界史话题聚焦-智慧讲坛新视野+导学案-2025届统编版高三历史二轮复习
- 模具单位年终工作总结
- 2025年考研护理面试试题及答案
- 福建省龙岩市2025届高三下学期3月一模试题 化学 含答案
- 2024全国职业院校技能大赛中职组“艺术设计”赛项备考试题库(含答案)
- 江西九江茅山头企业管理有限公司2024年纪检专干招聘笔试参考题库附带答案详解
- 医护职业危害与防护知识
- 2023年全国中学生生物学联赛北京赛区初赛
- 俄语视听说基础教程1
评论
0/150
提交评论