版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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版土石方运输合同
- 农村个人购房合同范例
- 合伙协议书范例
- 如何签订借款合同避免风险
- 个人汽车买卖合同样本模板
- 2023年高考地理专题复习新题典题精练-洋流(原卷版)
- 致大海选择性必修中册 第四单元课件
- (必练)广东省军队文职(经济学)近年考试真题试题库(含答案)
- 含羞草天气课件
- 2024年安全生产知识竞赛考试题库及答案(共五套)
- 22《鸟的天堂》课件
- 农业灌溉装置市场环境与对策分析
- 新疆乌鲁木齐市第十一中学2024-2025学年八年级上学期期中道德与法治试卷
- 2024年江西省高考地理真题(原卷版)
- 部编版小学五年级上册道法课程纲要(知识清单)
- 经济法学-计分作业一(第1-4章权重25%)-国开-参考资料
- 山东省临沂市(2024年-2025年小学四年级语文)人教版期中考试(上学期)试卷及答案
- 护士2024思想汇报5篇
评论
0/150
提交评论