版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Android程序设计基础第11章:存储技术-数据库操作本章内容第1节SQLite数据库概述第2节SQLite建库建表第3节管理数据库连接第4节
操作数据库数据第5节
数据绑定第6节db4o简介本章目标掌握SQLite数据的基本特点与工具使用。熟练掌握SQLite建库见表的方法。熟练掌握连接SQLite数据库的方法。熟悉SQLite数据库的升级与建立方法。掌握通过数据绑定完成数据显示的方法。了解db4o数据的特点与用法第1节SQLite数据库概述知识点预览#知识点重点难点应用说明1SQLite数据库简介介绍SQLite数据库的特点。2SQLite数据库工具使用√√介绍操作SQLite数据库的工具用法。3SQLite与大型数据库的区别介绍SQLite与大型数据库的区别。SQLite是一种非常流行的嵌入式数据库是由C语言编写而成是一款轻型关系型数据库支持SQL支持多种操作系统完全独立运行,没有依赖性Android内嵌了SQLite数据库SQLite数据库简介SQLite数据库工具是用来操作数据库文件的工具官方网站提供了命令行工具的下载下载sqlite-shell-******.zip文件解压缩后只有一个文件sqlite3将sqlite3所在的路径加入path环境变量Sqlite3工具的使用连接数据库文件SQLite数据库工具使用
$sqlite3<数据库文件路径>SQLite数据库工具是用来操作数据库文件的工具Sqlite3工具的使用数据库的相关管理命令都是以.开头,常用命令如下SQLite数据库工具使用2sqlite>.helpsqlite>.quitsqlite>.tablessqlite>.schema[表名]sqlite>.backup<文件全路径>sqlite>.restore<文件全路径>SQLite数据库工具是用来操作数据库文件的工具sqlite3工具的使用在sqlite3的命令行下可以直接输入标准sql语句除了sqlite3以外,还有很多非官方的可视化管理工具SQLiteDatabaseBrowserSQLiteExpertProfessionalSQLiteDeveloperSQLite数据库工具使用3SQLite与大型数据库的区别两者都是支持关系的关系型数据库SQLite是一个嵌入型的轻量级数据库,适合小数据量大型数据库独立运行在数据库服务器上,适合大数据量级别大型数据库通常以网络的方式对外提供服务SQLite与大型数据库的区别第2节SQLite建库建表知识点预览#知识点重点难点应用说明1创建SQLite数据库√√介绍如何创建SQLite数据库。2数据类型√介绍SQLite中的相关字段类型。3创建SQLite数据表
√√介绍SQLite中创建表的方法。4创建表间关联关系√√√介绍SQLite中表和表之间的关联。5事务控制√√√介绍SQLite中的事物控制方法。创建SQLite数据库直接在命令行输入上面的命令如果test.db不存在,则预创建(直到执行相关sql才创建文件)如果test.db存在,则连接数据库上述命令可以在创建数据库的同时使用sql.script进行初始化创建SQLite数据库$sqlite3test.db$sqlite3test.db<sql.scriptSQLite数据库的数据类型SQLite数据中的列可以存储任意数据类型的数据为了与其他数据库兼容,可以为字段指定默认的类型NULL:空值INTEGER:
带符号的整数,具体取决于存入数字的范围大小REAL:浮点数,存储为8-bytes的浮点数TEXT:字符串文本BLOB:二进制对象同时还接受如下一些类型:smallint16位整数int32位整数float32位浮点数double64位浮点数数据类型SQLite数据库的数据类型为了与其他数据库兼容,可以为字段指定默认的类型同时还接受如下一些类型:char(n)n不能炒作254varchar(n)n不能超过4000datetimetimestamp数据类型2创建SQLite数据表通过SQL语句创建表创建SQLite数据表createtablebooks(idintegerprimarykeyautoincrement,namevarchar(128)notnullunique,authorvarchar(128)notnull,pricedoublenotnull);创建表间关联(也就是通过外键建立关系)创建表间关联createtablegroups(idintegerprimarykeyautoincrement,namevarchar(128)notnullunique);cratetableusers(idintegerprimarykeyautoincrement,group_idintegerconstraintfk_users_group_idreferencesgroups(id),usernamevarchar(128)notnullpasswordvarchar(128)notnull);事务控制SQLite支持数据库事务事务控制sqlite>begin;sqlite>insertinto……sqlite>commit;sqlite>rollabck;第3节管理数据库连接知识点预览#知识点重点难点应用说明1文件保存位置√
介绍Android中SQLite数据库文件位置。2打开数据库连接√√介绍如何在程序中打开数据库连接。3数据库升级与存在性检测√介绍如何在程序中创建和升级数据库。4合理关闭数据库连接√√√介绍数据库连接的关闭时机
Android系统中SQLite数据库文件的保存位置默认情况下,数据库文件保存在如下目录中:/data/data/<应用程序包>/databases用户也可以指定将文件保存在任意有权限的目录中通常SD卡中的目录都可以文件保存位置在Android系统中连接数据库使用SQLiteDatabase类连接数据库通过SQLiteOpenHelper类来连接数据库打开数据库连接SQLiteDatabasedb=SQLiteDatabase.openOrCreateDatabase(dbFile,null);publicclassMyHelperextendsSQLiteOpenHelper{publicstaticfinalintVERSION=1;publicstaticfinalStringDATABASE_NAME=“test.db”;publicMyHelper(Contextcontext){
super(context,DATABASE_NAME,null,VERSION);}}SQLiteDatabasedb=helper.getWritableDatabase();数据库升级与存在性检测当应用升级的时候,需要检测数据库是否存在,或者是否要升级SQLiteOpenHelper提供了创建与升级的能力覆盖onCreate(SQLiteDatabasedb)方法,完成创建任务数据库升级与存在性检测
publicvoidonCreate(SQLiteDatabasedb){Stringstr_sql="CREATETABLE"+TABLE_NAME+"(”+ID+"INTEGERPRIMARYKEYAUTOINCREMENT,”+TEXT+"text);";db.execSQL(str_sql);}publicMyHelper(Contextcontext){super(context,DATABASE_NAME,null,VERSION);}数据库升级与存在性检测覆盖onUpdate方法,完成升级任务数据库升级与存在性检测2
publicvoidonUpgrade(SQLiteDatabasedb,intoldVersion,intnewVersion){
//这里填写数据库升级操作的代码}合理关闭数据库连接不再使用或长时间不用时,应关闭数据库连接程序退出时程序暂停时不再需要操作数据库时使用SQLiteDatabase类中的close方法关闭连接合理关闭数据库连接连接数据库示例演示演示连接数据库的示例第4节操作数据库知识点预览#知识点重点难点应用说明1执行查询
介绍如何在程序中执行数据库查询。2事务处理介绍如何在程序中处理事务。3执行批量插入√√√介绍批量插入时的性能问题与解决办法。执行查询(假设已经存在了数据库连接句柄db)在SQLiteDatabase中提供了如下方法用于查询execSQLinsert、insertOrThrow、insertWithOnConflictquery、rawQueryreplace、replaceOrThrowupdate、updateWithOnConflictdelete执行查询执行查询(假设已经存在了数据库连接句柄db)插入记录示例执行查询2//将一条新记录的各个字段内容装入一个ContentValues对象ContentValuescv=newContentValues();cv.put("name",user.getName());cv.put("age",user.getAge());cv.put("remark",user.getRemark());//插入一条新记录db.insert("users",null,cv);执行查询(假设已经存在了数据库连接句柄db)删除记录示例更新记录示例执行查询3//第一个参数为表名//第二个参数表示where后的条件表达式,可以使用?//第三个参数则是一个对应每一个?值的数组db.delete("users","id=?",newString[]{String.valueOf(userId)});ContentValuescv=newContentValues();cv.put("name",user.getName());cv.put("age",user.getAge());cv.put("remark",user.getRemark());db.update("users",cv,"id=?",newString[]{String.valueOf(userId)});执行查询(假设已经存在了数据库连接句柄db)单表查询所有记录示例执行查询4Cursorc=db.query("users",null,null,null,null,null,"name");List<User>users=null;if(c!=null){users=newArrayList<User>();while(c!=null&&c.moveToNext()){Useru=newUser();u.setId(c.getInt(0));u.setName(c.getString(1));u.setAge(c.getInt(2));u.setRemark(c.getString(3));users.add(u);}c.close();}执行查询(假设已经存在了数据库连接句柄db)单表条件查询记录示例执行查询5Cursorc=db.query(“users”,//表名newString[]{“name”,“age”},//select包含的字段
“age>?”,
//where条件表达式newString[]{“10”},
//条件值null,//group子句
null,//having子句“namedesc”//排序字段);执行查询(假设已经存在了数据库连接句柄db)任意SQL条件查询记录示例执行查询6Stringsql=“selectname,agefromuserswhereage>?”Cursorc=db.query(sqlnewString[]{“10”});事务是确保数据库操作原子性的保障SQLiteDatabase提供了如下方法用于事务处理beginTransaction开启事务setTransactionSuccessful提交事务endTransaction关闭事务,如果未提交事务,则自动rollback事务处理db.beginTransaction();//开始事务try{……//这里填写数据库操作代码db.setTransactionSuccessful();//提交事务}finally{db.endTransaction();//关闭事务}执行批量插入时的性能问题简单的批量插入实例这样的程序在实际运行时将会产生低效率由于没有开启事务,使得每一次插入都会提交一次,耗时很长执行批量插入for(inti=0;i<userList.size();i++){Useruser=userList.get(i);ContentValuescv=newContentValues();cv.put("name",user.getName());cv.put("age",user.getAge());cv.put("remark",user.getRemark());db.insert("users",null,cv);}执行批量插入时的性能问题开启事务的批量插入实例执行批量插入2db.beginTransaction();try{for(inti=0;i<userList.size();i++){Useruser=userList.get(i);ContentValuescv=newContentValues();cv.put("name",user.getName());cv.put("age",user.getAge());cv.put("remark",user.getRemark());db.insert("users",null,cv);}db.setTransactionSuccessful();}finally{db.endTransaction();}数据库操作示例演示演示数据库操作示例第5节数据绑定知识点预览#知识点重点难点应用说明1数据绑定的必要性√
介绍数据绑定的必要性。2SimpleCursorAdapter√介绍用SimpleCursorAdapter进行数据绑定。3修改绑定数据√介绍使用数据绑定时如何修改显示数据。数据绑定是指将界面和数据进行绑定在界面和数据之间建立绑定模式有助于数据的呈现Adapter其实就是界面和数据之间绑定的桥梁将视图和数据绑定后将会降低维护数据的复杂度SimpleCursorAdapter提供了数据层的数据绑定桥梁数据绑定的必要性SimpleCursorAdapter可以将数据库层的数据提供给列表1、准备一个列表项的布局用于ListView的展现SimpleCursorAdapter<LinearLayoutxmlns:android=""android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="horizontal">
<TextViewandroid:id="@+id/nametextview“android:layout_width="0dp“android:layout_height="40dp“android:layout_weight="1"/><TextViewandroid:id="@+id/agetextview“android:layout_width="80dp"android:layout_height="40dp"/></LinearLayout>SimpleCursorAdapter可以将数据库层的数据提供给列表2、使用SimpleCursorAdapter展现数据SimpleCursorAdapter2ListViewbookListView=(ListView)findViewById(R.id.booklist);String[]from=newString[]{"_name","_age“};int[]to=newint[]{R.textview,R.id.agetextview};Cursorcursor=db.rawQuery(“select*frombooks”,null);SimpleCursorAdapteradapter=newSimpleCursorAdapter(MainActivity.this,R.layout.book_list_item,cursor,from,to,0);bookListView.setAdapter(adapter);修改绑定数据有时候直接展现的数据可能不符合要求,需要转变后展示可以通过SimpleCursorAdapter.ViewBinder接口来实现修改的步骤如下:1、编写一个类实现SimpleCursorAdapter.ViewBinder接口修改绑定数据SimpleCursorAdapter.ViewBinderviewBinder=newSimpleCursorAdapter.ViewBinder(){publicbooleansetViewValue(Viewview,Cursorcursor,intcolumnIndex){if(cursor.getColumnIndex("_name")==columnIndex){TextViewv=(TextView)view;v.setText("N:"+cursor.getString(columnIndex));returntrue;}returnfalse;}};修改绑定数据修改的步骤如下:2、使用ViewBinder修改数据修改绑定数据2ListViewbookListView=(ListView)findViewById(R.id.booklist);String[]from=newString[]{"_name","_age“};int[]to=newint[]{R.textview,R.id.agetextview};Cursorcursor=db.rawQuery(“select*frombooks”,null);SimpleCursorAdapteradapter=newSimpleCursorAdapte
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年中国铝制品冲件市场调查研究报告
- 2024年建筑项目施工协作合同范本一
- 2021万圣节祝福语 万圣节祝福语大全
- 2024年水陆货物运输全面保险协议
- 临沂科技职业学院《材料近代测试方法及实验》2023-2024学年第一学期期末试卷
- 2024年度城市绿化投标廉政保证函3篇
- 2024年标准商品销售协议参考格式版B版
- 2024至2030年薄型圆底刀项目投资价值分析报告
- 2024至2030年切肉大刀项目投资价值分析报告
- 临汾职业技术学院《材料分析化学》2023-2024学年第一学期期末试卷
- 【MOOC】法理学-西南政法大学 中国大学慕课MOOC答案
- 辽宁省普通高中2024-2025学年高一上学期12月联合考试语文试题(含答案)
- 储能运维安全注意事项
- 2024蜀绣行业市场趋势分析报告
- 电力法律法规培训
- 2024年世界职业院校技能大赛“智能网联汽车技术组”参考试题库(含答案)
- 【课件】校园安全系列之警惕“死亡游戏”主题班会课件
- 化工企业冬季安全生产检查表格
- 2024年工程劳务分包联合协议
- 蜜雪冰城员工合同模板
- 广东省深圳市龙岗区2024-2025学年三年级上学期11月期中数学试题(含答案)
评论
0/150
提交评论