




已阅读5页,还剩12页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Android数据库 之 SQLite数据库Android数据库一、关系型数据库SQLIte每个应用程序都要使用数据,Android应用程序也不例外,Android使用开源的、与操作系统无关的SQL数据库SQLite。SQLite第一个Alpha版本诞生于2000年5月,它是一款轻量级数据库,它的设计目标是嵌入式的,占用资源非常的低,只需要几百K的内存就够了。SQLite已经被多种软件和产品使用,Mozilla FireFox就是使用SQLite来存储配置数据的,Android和iPhone都是使用SQLite来存储数据的。SQLite体系结构图如下:编译器包括Tokenizer(词法分析器)、 Parser(语法分析器)、Code Generator(代码产生器)。他们协同处理文本形式的结构化查询语句。后端由B-tree,Pager,OS Interface组成。B-tree的职责是负责排序,维护多个数据库页之间错综复杂的关系,将页面组织成树状结构,页面就是树的叶子。Pager负责传输,根据B-tree的请求从磁盘读取页面或者写入页面。公共服务中有各种实用的功能比如:内存分配、字符串比较,Unicode转换等。SQLite数据库是D.Richard Hipp用C语言编写的开源嵌入式数据库,支持的数据库大小为2TB。它具有如下特征:1、轻量级SQLite和CS模式的数据库软件不同,它是进程内的数据库引擎,因此不存在数据库的客户端和服务器。使用SQLite一般只需要带上它的一个动态库,就可以享受它的全部功能。而且那个动态库的尺寸也相当小。2、独立性SQLite数据库的核心引擎本身不依赖第三方软件,使用它也不需要“安装”,所以在使用的时候能够省去不少麻烦。3、隔离性SQLite数据库中的所有信息(比如表、视图、触发器)都包含在一个文件内,方便管理和维护。4、跨平台SQLite数据库支持大部分操作系统,除了我们在电脑上使用的操作系统之外,很多手机操作系统同样可以运行,比如Android、Windows Mobile、Symbian、Palm等。5、多语言接口SQLite数据库支持很多语言编程接口,比如CC+、Java、Python、dotNet、Ruby、Perl等,得到更多开发者的喜爱。6、安全性SQLite数据库通过数据库级上的独占性和共享锁来实现独立事务处理。这意味着多个进程可以在同一时间从同一数据库读取数据,但只有一个可以写入数据。在某个进程或线程向数据库执行写操作之前,必须获得独占锁定。在发出独占锁定后,其他的读或写操作将不会再发生。SQLite官方网站(),了解更多内容请前往。二、导出查看数据库文件在android中,为某个应用程序创建的数据库,只有它可以访问,其它应用程序是不能访问的,数据库位于Android设备/data/data/package_name/databases文件夹中。想要将数据库文件导出可以使用eclipse,如图所示:查看数据库,使用SQlite Database Browser,如图所示:三、扩展类3.1扩展SQLiteOpenHelperAndroid 不自动提供数据库。在 Android 应用程序中使用 SQLite,必须自己创建数据库,然后创建表、索引,填充数据。Android 提供了 SQLiteOpenHelper 帮助你创建一个数据库,你只要继承 SQLiteOpenHelper 类,就可以轻松的创建数据库。SQLiteOpenHelper 类根据开发应用程序的需要,封装了创建和更新数据库使用的逻辑。SQLiteOpenHelper 的子类,至少需要实现三个方法:构造函数,调用父类 SQLiteOpenHelper 的构造函数onCreate()方法;/ TODO 创建数据库后,对数据库的操作onUpgrage()方法。/ TODO 更改数据库版本的操作当你完成了对数据库的操作(例如你的 Activity 已经关闭),需要调用 SQLiteDatabase 的 Close() 方法来释放掉数据库连接。操作数据库的最佳实践是创建一个辅助类,例如联系人模块class ContactsDatabaseHelper extends SQLiteOpenHelper3.2 Cursor类Android使用Cursor类返回一个需要的值,Cursor作为一个指针从数据库查询返回结果集,使用Cursor允许Android更有效地管理它们需要的行和列,你使用ContentValues对象存储键/值对,它的put()方法允许你插入不同数据类型的键值。3.3 数据类型SQLite 和其他数据库最大的不同就是对数据类型的支持,创建一个表时,可以在 CREATE TABLE 语句中指定某列的数据类型,但是你可以把任何数据类型放入任何列中。当某个值插入数据库时,SQLite 将检查它的类型。如果该类型与关联的列不匹配,则 SQLite 会尝试将该值转换成该列的类型。如果不能转换,则该值将作为其本身具有的类型存储。比如可以把一个字符串(String)放入 INTEGER 列。SQLite 称这为“弱类型”(manifest typing.)。四、数据库操作4.1创建和打开数据库在Android中创建和打开一个数据库都可以使用openOrCreateDatabase方法来实现,因为它会自动去检测是否存在这个数据库,如果存在则打开,如果不存在则创建一个数据库:创建成功则返回一个SQLiteDatebase对象,否则抛出异常FileNotFoundException。下面我们来创建一个名为Test的数据库,并返回一个SQLiteDatabase对象mSQLiteDatabase。mSQLiteDatabase=this.openOrCreateDatabase(Test,MODE_PRIVATE,null);4.2创建表通过execSQL方法来执行一条SQL语句。String CREATE_TABLE=create table 表名(列名,列名,);mSQLiteDatabase.execSQL(CREATE_TABLE);创建表的时候总要确定一个主键,这个字段是64位整型,别名_rowid。其特点就是自增长功能。当到达最大值时,会搜索该字段未使用的值(某些记录被删除_rowid会被回收),所以要唯一严格增长的自动主键必须加入关键字autoincrement。4.3删除表mSQLiteDatabase(drop table 表名);4.4修改数据4.4.1 插入记录可以使用insert方法来添加数据,但是insert方法要求把数据都打包到ContentValues中,ContentValues其实就是一个Map,Key值是字段名称,Value值是字段的值。通过ContentValues的put方法就可以把数据放到ContentValues对象中,然后插入到表中去。具体实现如下:ContentValues cv=new ContentValues();cv.put(TABLE_NUM,1);cv.put(TABLE_DATA,测试数据库数据);mSQLiteDatabase.insert(Test,null,cv);/同样可以使用execSQL方法来执行一条“插入“的SQL语句String INSERT_DATA=insert into 表名(列名,) values (值,);mSQLiteDatabase.execSQL(INSERT_DATA);4.4.2 更新记录ContentValues cv=new ContentValues();cv.put(TABLE_NUM,3);cv.put(TABLE_DATA,修改后数据);mSQLiteDatabase.update(Test,cv,num+=+rowId,null);/同样可以使用execSQL方法来执行一条“更新”的SQL语句String UPDATE_DATA=update 表名 set 列名=xxx where xxx;mSQLiteDatabase.execSQL(UPDATE_DATA);update 表名 set 列名=xxx where条件4.4.3 删除记录/要删除数据可以使用delete方法mSQLiteDatabase.delete(Test,WHERE _id=+0,null);/也可以通过execSQL方法执行SQL语句删除数据mSQLiteDatabase.execSQL(delete from 表名 where 条件);4.5查询SELECT列名 FROM 表名 WHERE 条件例如在联系人中保存3个联系人,data表如下:查询data1值为10086的项对查询条件和返回值稍做修改LIKE的使用Like经常和 %或者 _ 搭配使用。%可与任意0个或者多个字符匹配,_可与任意单个字符匹配。GLOB的使用Glob与like非常相似,常与 * 搭配。限定和排序关键字:order、limit、offset。Order分为asc(默认升序),desc(降序)。限定个数指定偏移内连接:通过表中两个字段进行连接,找出两个集合的交集。 select xxx from 表名1 inner join 表名2 on 表名1.列名 = 表名2.列名左外连接:左表的所有项和内连接项。 select xxx from 表名1 left outer join 表名2 on 表名1.列名 = 表名2.列名五、高级特性5.1 视图视图是虚拟表,它的内容都派生自其它表的查询结果。虽然它看起来像基本表,但是它不是,因为基本表的内容是持久的,而视图的内容是使用时动态产生的。create view 表名 as 定义5.2 索引索引是一种用来在某种条件下加速查询的结构。create index 索引名 on 表名(列名)5.3 触发器触发器的作用是当具体的表发生特定的数据事件时,执行对应的操作。create trigger 触发器名 before|after insert|delete|update|update of columns on 表名 action首先还谢谢是提供底稿的同事,这里只是介绍了基础的东西,感兴趣的同学,请SQLite官方网站()了解。这里提供一个博客园的博客在Android中查看和管理sqlite数据库具体地址:/walkingp/archive/2011/03/28/1997437.html其中的评论说道:有两点需要注明一下:1. data/data这个目录是需要root权限的;2. adb shell进入手机后,不是每个手机都能找到sqlite3这个命令的。至少说我们拿到的工程样机里面就没有。您可能也喜欢:Android数据库 之 SQLite数据库学习Oracle数据库(3)-SELECT语句学习Oracle数据库(2)-SQLPLUS介绍学习Oracle数据库(1)-写在前面的话学习Oracle数据库(4)在表上建立不同类型的约束无觅关联推荐?分类:Android开发标签:android,sqlite,sql绿色通道:好文要顶关注我收藏该文与我联系Poborsky关注 - 44粉丝 - 68+加关注70(请您对文章做出评价)上一篇:Oracle HRMS,PeopleSoft HR,SAP HR区别 主流HR软件对比分析下一篇:group by的使用说明posted 2012-08-28 18:31Poborsky阅读(92514) 评论(7)编辑收藏评论列表#1楼2012-08-29 08:05江城子写的不错,想请教楼主一下,如果是在真机上调试,而且机器没有root,是看不到data文件夹下的db文件的,如果我想查询一下数据库里的全部数据或是相关的信息,只能通过程序调用么?是否有更好的方法?支持(0)反对(0)#2楼楼主2012-08-29 09:24Poborsky江城子在进行调试的时候是能够看到data文件的。其实你可以通过调用Eclipse中的File Explorer将数据库导出,然后通过SQLite Database Brower进行查询,首先在data/data/package_name/databases文件夹中找到要导出的数据库文件,然后通过点击左边那个按钮pull a file from the device导出到计算机中,就可以像操作其他数据库一样操作该数据库了。支持(0)反对(0)#3楼2012-08-29 09:45江城子poborsky我就是在DDMS里看不到的,我说的是真机,模拟器里是可以的,真机是没有root的,所以才个问题。如果真机能看到这个文件我知道是可以导出的支持(0)反对(0)#4楼楼主2012-08-29 12:47Poborsky江城子使用Eclipse开发Android上的数据库应用,需要把数据库文件放到/data/data/mynamespace/database文件夹下,普通手机通过ROOT后经常还是看不到这个文件夹,这时需要用RE管理器重设一下/data/data/mynamespace/database各级目录的权限即可。目前如果没root,我能想到的就只有通过程序调用了,不好意思没能帮到什么忙,之前是我理解错误了,Sorry!我们再找找看,还有没有其他方法吧!支持(0)反对(0)#5楼2012-08-29 13:38江城子poborsky非常感谢你的回复,只是感觉android在这方面很不方便,并不是所有手机都能root的,如果一部没有root的手机,有一个数据库里很多表,也有一些数据,如果想查看一下数据库的结构和修改部分数据再回传回去,实在是不太方便支持(0)反对(0)#6楼楼主2012-08-29 15:02Poborsky江城子我今天咨询了哈,我的同事,他说我们现在编译的版本属于调试版本,拥有很高权限,而一般用户的手机用的是量产版本,系统将进行保护,不会将权限打开,所以很多就需要通过破解获得root权限,才能进行相关操作。支持(2)反对(0)#7楼2015-02-11 22:13simfemark支持(0)反对(0)刷新评论刷新页面返回顶部注册用户登录后才能发表评论,请登
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 离婚诉讼调解达成一致子女抚养及财产分割执行合同
- 离婚房产分割与原配偶子女就业基金协议
- 离婚财产分割及子女抚养费支付协议
- 离婚协议范本:无子女共同财产分配及债务清理
- 链家新人培训体系
- 班组新员工安全培训内容课件
- 中国历史文选 课件 第十九讲 经籍志序;第二十讲 二体
- 幼儿学看病课件
- 进餐环节培训课件
- 统编人教版四年级语文下册第三单元《语文园地三》示范教学课件
- 26个字母卡片大小写A4打印-版
- 2025年辅警招聘公安基础知识题库附含参考答案
- 儿科高危药品与急救药品管理指南
- 《电机与拖动基础》课件(共十一章)
- 2025至2030中国体检医院行业发展趋势分析与未来投资战略咨询研究报告
- 2024年成人高考成考(专升本)大学语文试题及解答参考
- 肥胖患者的长期体重管理及药物临床应用指南解读课件
- 2025至2030中国环境监测行业市场发展现状及投资前景与策略报告
- 阀门采购管理办法
- 2025年中级注安《安全生产管理》真题及答案
- 企业外来人员管理办法
评论
0/150
提交评论