关闭

关闭

封号提示

内容

首页 Android_数据库技术.pdf

Android_数据库技术.pdf

Android_数据库技术.pdf

上传者: 潇潇 2011-09-19 评分1 评论0 下载43 收藏0 阅读量448 暂无简介 简介 举报

简介:本文档为《Android_数据库技术pdf》,可适用于IT/计算机领域,主题内容包含wwwmoandroidcom moAndroid感受Android带给我们的新体验 Android数据库技术 Android SQLite解析 C符等。

wwwmoandroidcom moAndroid感受Android带给我们的新体验 Android数据库技术 Android SQLite解析 ContentResolver ContentProvider Android数据存储(总结篇) Android SQLite解析 说到SQLite无论C、Java程序员还是其他的非主流程序员应该都听说过它可见其非常流行。SQLite是轻量级的、嵌入式的、关系型数据库目前已经在iPhone、Android等手机系统中使用而且被其他的公司广泛使用比如说:Adobe具体SQLite的介绍可以到其官方网站浏览。在学习AndroidSQLite前必须对SQL语句有很深入的了解(如果忘记了利用这次机会好好复习下)。关于数据库、表的创建等基础知识由于篇幅有限就不在此详细说明主要说明数据库的大基本操作:添加(insert)、删除(delete)、查询(query)、修改(update)这是在学习AndroidSQLite的过程中最为关注的部分。除了这大操作以外我们还需要注意的地方就是:获取查询结果的记录集(Recordset)。AndroidSQLite分析等有了这些基本概念再来学习AndroidSQLite从AndroidSDK中摘要如下:wwwmoandroidcom moAndroid感受Android带给我们的新体验 首先关注到的是SQLiteDatabase类在AndroidSDK中看其详细说明其主要接口如下:返回值函数原型longinsert(String table, String ColumnHack, ContentValues values)Convenience methodfor inserting a row into the databaseIntdelete(String table, String whereClause, String whereArgs)Convenience method fordeleting rows in the databaseCursorquery(String table, String columns, String selection, String selectionArgs, StringgroupBy, String having, String orderBy, String limit)Query the given table, returning aCursor over the result setIntupdate(String table, ContentValues values, String whereClause, String whereArgs)Convenience method for updating rows in the database看到这些是不是感到似曾相识了?不错这就是数据库的大基本操作:添加(insert)、删除(delete)、查询(query)、修改(update)。感觉轻松很多了再仔细看下这些函数的参数发现很多参数都是按照SQL语句定义的例如:select*frompemployeewhereid<>’′orderbyidasc需要额外说明个数据结构:ContentValuesCursorContentValues就相当于C中的map(Stringkey,Integervalue)其主要接口包括put()get()。再结合insert操作的主要目的:按照表中数据段将对wwwmoandroidcom moAndroid感受Android带给我们的新体验 应的数据项写入到表中就可以看出来ContentValues主要是存放表中每个表的数据段以及其对应的值。Cursor也就是前面说的:查询结果的记录集。从记录集的特征可以想到其包含的操作应该有:MoveFirst()、MoveLast()、MoveNext()、Move()、IsLast()、GetColumns()等而且它还是个抽象类abstractclassSQLiteCursor就是其具体的实现。关于SQLiteDatabase类其他值得关注的函数是:Create()、execSQL()。至于其他的函数比如beginTransaction()endTransaction()等关于数据库同步操作的函数就只有在使用的过程中深入了解。额外补充说明最后值得一提的是:一个很好的辅助类SQLiteOpenHelper其简化了数据库的操作。按照AndroidSDK文档中的说明也可以通过继承此类、改写其接口的方法来实现对数据库的操作SQLiteOpenHelper其主要接口如下:仔细分析其说明发现这个类主要是创建一个数据库并对数据库的版本进行管理。当在程序中调用这个类的方法getWritableDatabase()或者getReadableDatabase()方法的时候如果当时没有数据库那么Android系统就会自动创建一个数据数据库。其他辅助说明wwwmoandroidcom moAndroid感受Android带给我们的新体验 所有的数据库文件存放在手机中的datadatapackagenamedatabases路径下。最为重要的一点 是:在Android中所有的应用软件的数据(包括文件、数据库)为该应用软件所私有的如果需要在不同的应用中共享数据必须使用 ContentProvider实现一个ContentProvider类实现了一组标准的方法接口从而能够让其他的应用保存或读取此 ContentProvider的各种数据类型。 为了方便测试如何查看SQLite数据库的内容?使用Android SDK提供的工具:sqliteexe。这是一个命令行实用工具列举主要使用的命令如下:查看表结构 sqlite “path”   dump 例如 G:androidandroid‐sdk‐windowtools>sqlite mdb    bump 运行结构如下: BEGGIN TRANSACTION CREATE TABLE TmProgramm (index INTEGER,nID INTEGER, nChannelID INTEGER,strTitle CHAR(), dwDuration INTEGER, strThumbNail CHAR(),strURL CHAR(),strPathName CHAR(), strAuthor CHAR(),dwSize INTEGER,State INTEGER,Percent INTEGER, strConverted CHAR(),dwVideoType INTEGER,dwDownloadedBytes INTEGER,strTime CHAR(), strHTTPVersion CHAR(),strUserAgent CHAR(),strReferer CHAR()) COMMIT 这就是当初创建数据库的语句 查看表中的内容 sqlite   “path” schema 具体运行结果可以下载数据库文件mdb 在命令行中运行就可以看到了 其他帮助命令查询 sqlite help 总结说明通过对以上的学习简单写了个数据库的例子(moandroiddatabasezip)大家可以参考下。相关文章Activity 、Intent深入解析 Android 实现联网(一)package说明 Android画图学习总结(一)类的简介 Cocosd Android移植手记(一)Opengl ES创建流程 Android SDK深入解析 Application Components wwwmoandroidcom moAndroid感受Android带给我们的新体验 Android 应用程序之间数据共享ContentResolver Android是如何实现应用程序之间数据共享的?一个应用程序可以将自己的数据完全暴露出去外界更本看不到也不用看到这个应用程序暴露的数据是如何存储的或者是使用数据库还是使用文件还是通过网上获得这些一切都不重要重要的是外界可以通过这一套标准及统一的接口和这个程序里的数据打交道例如:添加(insert)、删除(delete)、查询(query)、修改(update)当然需要一定的权限才可以。如何将应用程序的数据暴露出去?Android提供了ContentProvider一个程序可以通过实现一个Contentprovider的抽象接口将自己的数据完全暴露出去而且Contentproviders是以类似数据库中表的方式将数据暴露。Contentproviders存储和检索数据通过它可以让所有的应用程序访问到这也是应用程序之间唯一共享数据的方法。要想使应用程序的数据公开化可通过种方法:创建一个属于你自己的Contentprovider或者将你的数据添加到一个已经存在的Contentprovider中前提是有相同数据类型并且有写入Contentprovider的权限。如何通过一套标准及统一的接口获取其他应用程序暴露的数据?Android提供了ContentResolver外界的程序可以通过ContentResolver接口访问ContentProvider提供的数据。当前篇主要说明如何获取其它应用程序共享的数据比如获取Android手机电话薄中的信息。什么是URI?在学习如何获取ContentResolver前有个名词是必须了解的:URI。URI是网络资源的定义在Android中赋予其更广阔的含义先看个例子如下:将其分为ABCD个部分:A:标准前缀用来说明一个ContentProvider控制这些数据无法改变的B:URI的标识它定义了是哪个ContentProvider提供这些数据。对于第三方应用程序为了保证URI标识的唯一性它必须是一个完整的、小写的类名。这个标识在<provider>元素的authorities属性中说明:<providername=”TransportationProvider”authorities=”comexampletransportationprovider”>C:路径ContentProvider使用这些路径来确定当前需要生什么类型的数据wwwmoandroidcom moAndroid感受Android带给我们的新体验 URI中可能不包括路径也可能包括多个D:如果URI中包含表示需要获取的记录的ID如果没有ID就表示返回全部由于URI通常比较长而且有时候容易出错切难以理解。所以在Android当中定义了一些辅助类并且定义了一些常量来代替这些长字符串例如:PeopleCONTENTURIContentResolver介绍说明看完这些介绍大家一定就明白了ContentResolver是通过URI来查询ContentProvider中提供的数据。除了URI以外还必须知道需要获取的数据段的名称以及此数据段的数据类型。如果你需要获取一个特定的记录你就必须知道当前记录的ID也就是URI中D部分。前面也提到了Contentproviders是以类似数据库中表的方式将数据暴露出去那么ContentResolver也将采用类似数据库的操作来从Contentproviders中获取数据。现在简要介绍ContentResolver的主要接口如下:返回值函数声明final Uriinsert(Uri url, ContentValues values)Inserts a row into a table at thegiven URLfinal intdelete(Uri url, String where, String selectionArgs)Deletes row(s)specified by a content URIfinal Cursorquery(Uri uri, String projection, String selection, String selectionArgs,String sortOrder)Query the given URI, returning a Cursor over the result setfinal intupdate(Uri uri, ContentValues values, String where, StringselectionArgs)Update row(s) in a content URI看到这里是否感觉与数据库的操作基本一样的?就是这样的详细解析请参考AndroidSQLite解析篇中的说明不在此详细说明。最后一个问题:如何获取ContentResolver?调用getContentResolver()例如:ContentResolvercr=getContentResolver()制作ContentResolver实例以上就完全介绍了如何获取、使用ContentResolver启动Eclipes制作一个完整的实例如下:wwwmoandroidcom moAndroid感受Android带给我们的新体验 打开showcontentjava修改如下:packagemoandroidshowcontactimportandroidappListActivityimportandroiddatabaseCursorimportandroidosBundleimportandroidproviderContactsPhonesimportandroidwidgetListAdapterimportandroidwidgetSimpleCursorAdapterwwwmoandroidcom moAndroid感受Android带给我们的新体验 publicclassshowcontactextendsListActivity{protectedvoidonCreate(BundlesavedInstanceState){superonCreate(savedInstanceState)Cursorc=getContentResolver()query(PhonesCONTENTURI,,,,)startManagingCursor(c)ListAdapteradapter=newSimpleCursorAdapter(this,androidRlayoutsimplelistitem,c,newString{PhonesNAME,PhonesNUMBER},newint{androidRidtext,androidRidtext})setListAdapter(adapter)}}然后在AndroidManifestXML中<application>元素前增加如下许可:<usespermissionandroid:name=”androidpermissionREADCONTACTS”>最后运行程序在模拟器启动后单击Menu返回到Home界面打开Contacts选择Contacts标签页添加个联系人信息。返回到Home选择wwwmoandroidcom moAndroid感受Android带给我们的新体验 moandroidshowcontact运行刚添加的个联系人信息将显示在界面上如下:总结说明ContentResolver的使用极大的方便了应用程序之间共享数据如何将应用程序的数据完全暴露给给他应用程序使用了将在下篇文章Android应用程序之间数据共享ContentProvider中说明。相关文章Android 应用程序之间数据共享ContentProvider wwwmoandroidcom moAndroid感受Android带给我们的新体验 Activity 、Intent深入解析 Android 实现联网(一)package说明 Android画图学习总结(一)类的简介 Cocosd Android移植手记(一)Opengl ES创建流程 Android 应用程序之间数据共享ContentProvider 在Android应用程序之间数据共享ContentResolver中已经说明了Android是如何实现应用程序之间数据共享的并详细解析了如何获取其他应用程序共享的数据。ContentProviders存储和检索数据通过它可以让所有的应用程序访问到这也是应用程序之间唯一共享数据的方法。那么如何将应用程序的数据暴露出去?通过以前文章的学习知道ContentResolver是通过ContentProvider来获取其他与应用程序共享的数据那么ContentResolver与ContentProvider的接口应该差不多的。其中ContentProvider负责组织应用程序的数据 向其他应用程序提供数据 ContentResolver则负责获取ContentProvider提供的数据 修改添加删除更新数据等 ContentProvider是如何向外界提供数据的?Android提供了ContentProvider一个程序可以通过实现一个ContentProvider的抽象接口将自己的数据完全暴露出去而且ContentProviders是以类似数据库中表的方式将数据暴露也就是说ContentProvider就像一个“数据库”。那么外界获取其提供的数据也就应该与从数据库中获取数据的操作基本一样只不过是采用URI来表示外界需要访问的“数据库”。至于如何从URI中识别出外界需要的是哪个“数据库”这就是Android底层需要做的事情了不在此详细说。简要分析下ContentProvider向外界提供数据操作的接口:query(Uri,String,String,String,String)insert(Uri,ContentValues)update(Uri,ContentValues,String,String)wwwmoandroidcom moAndroid感受Android带给我们的新体验 delete(Uri,String,String)这些操作与数据库的操作基本上完全一样在此不详细说具体的解析可以参考AndroidSqlite解析篇中的详细说明。需要特殊说明的地方是URI:在URI的D部分可能包含一个ID这个应该出现在SQL语句中的可以以种特殊的方式出现这就要求我们在提供数据的时候需要来额外关注这个特殊的信息。AndroidSDK推荐的方法是:在提供数据表字段中包含一个ID在创建表时INTEGERPRIMARYKEYAUTOINCREMENT标识此ID字段。ContentProvider是如何组织数据的?组织数据主要包括:存储数据读取数据以数据库的方式暴露数据。数据的存储需要根据设计的需求选择合适的存储结构首选数据库当然也可以选择本地其他文件甚至可以是网络上的数据。数据的读取以数据库的方式暴露数据这就要求无论数据是如何存储的数据最后必须以数据的方式访问。可能还有个问题是需要关注的。ContentProvider是什么时候创建的是谁创建的?访问某个应用程序共享的数据是否需要启动这个应用程序?这个问题在 Android SDK中没有明确说明但是从数据共享的角度出发ContentProvider应该是Android在系统启动时就创建了否则就谈不上数据共享了。 这就要求在AndroidManifestXML中使用<provider>元素明确定义。 可能会有多个程序同时通过ContentResolver访问一个ContentProvider会不会导致像数据库那样的“脏数据”?这个问 题一方面需要数据库访问的同步尤其是数据写入的同步在AndroidManifestXML中定义ContentProvider的时候需要考虑 是<provider>元素multiprocess属性的值另外一方面Android在ContentResolver中提供了 notifyChange()接口在数据改变时会通知其他ContentObserver这个地方应该使用了观察者模式在 ContentResolver中应该有一些类似registerunregister的接口。 至此已经对ContentProvider提供了比较全面的分析至于如何创建ContentProvider可通过种方法:创建一个属于你自己的ContentProvider或者将你的数据添加到一个已经存在的ContentProvider中当然前提是有相同数据类型并且有写入Contentprovider的权限。在AndroidSDK的sample中提供的Notepad具体实例中去看源代码!相关文章wwwmoandroidcom moAndroid感受Android带给我们的新体验 Android 应用程序之间数据共享ContentResolver Activity 、Intent深入解析 Android 实现联网(一)package说明 Android画图学习总结(一)类的简介 Cocosd Android移植手记(一)Opengl ES创建流程 Android数据存储(总结篇) 在前面的篇文章:AndroidSQLite解析、Android应用程序之间数据共享中分别详细说明了如何使用数据库存储信息以及如何通过ContentProvider获取其他应用程序共享的数据现将Android数据存储做下总结在以后的开发过程中根据需求选择合适的数据存储方式。Android提供了种方式存储数据:使用SharedPreferences存储数据 文件存储数据 SQLite数据库存储数据 使用ContentProvider存储数据 网络存储数据 其中已经在AndroidSQLite解析、Android应用程序之间数据共享篇幅中详细说明不在此重复说明现将其他种方式详细介绍。使用SharedPreferences存储数据首先说明SharedPreferences存储方式它是Android提供的用来存储一些简单配置信息的一种机制例如:登录用户的用户名与密码。其采用了Map数据结构来存储数据以键值的方式存储可以简单的读取与写入具体实例如下:voidReadSharedPreferences(){StringstrName,strPasswordSharedPreferencesuser=getSharedPreferences(“userinfo”,)strName=usergetString(“NAME”,””)strPassword=usergetString(“PASSWORD”,””)}voidWriteSharedPreferences(StringstrName,StringstrPassword){SharedPreferencesuser=getSharedPreferences(“userinfo”,)ueredit()wwwmoandroidcom moAndroid感受Android带给我们的新体验 userputString(“NAME”,strName)userputString(“PASSWORD”,strPassword)usercommit()}数据读取与写入的方法都非常简单只是在写入的时候有些区别:先调用edit()使其处于编辑状态然后才能修改数据最后使用commit()提交修改的数据。实际上SharedPreferences是采用了XML格式将数据存储到设备中在DDMS中的FileExplorer中的datadata<packagename>sharesprefs下。以上面的数据存储结果为例打开后可以看到一个userinfoxml的文件打开后可以看到:<xmlversion=”″encoding=”″><map><stringname=”NAME”>moandroid<string><stringname=”PASSWORD”>SharedPreferences<string><map>使用SharedPreferences是有些限制的:只能在同一个包内使用不能在不同的包之间使用。文件存储数据文件存储方式是一种较常用的方法在Android中读取写入文件的方法与Java中实现IO的程序是完全一样的提供了openFileInput()和openFileOutput()方法来读取设备上的文件。FilterInputStreamFilterOutputStream等可以到Javaiopackage说明中去详细学习不再此详细说明具体实例如下:Stringfn=“moandroidlog”FileInputStreamfis=openFileInput(fn)FileOutputStreamfos=openFileOutput(fn,ContextMODEPRIVATE)除此之外Android还提供了其他函数来操作文件详细说明请阅读AndroidSDK。网络存储数据网络存储方式需要与Android网络数据包打交道关于Android网络数据包的详细说明请阅读AndroidSDK引用了JavaSDK的哪些package?。总结说明以上中存储方式在以后的开发过程中根据设计目标、性能需求、空间需求等找到合适的数据存储方式。Android中的数据存储都是私有的其他应用程序都是无法访问的除非通过ContentResolver获取其他程序共享的数据。wwwmoandroidcom moAndroid感受Android带给我们的新体验 相关文章Activity 、Intent深入解析 Android 实现联网(一)package说明 Android画图学习总结(一)类的简介 Cocosd Android移植手记(一)Opengl ES创建流程 Android SDK深入解析 Application Components 

类似资料

编辑推荐

隋书(二)‖(唐)魏征 等 撰‖中华书局 1973年8月.pdf

隋书(一)‖(唐)魏征 等 撰‖中华书局 1973年8月.pdf

11ZJ311地下室防水图集.pdf

Cognition:Exploring the Science of the Mind, 4th ed 2010.pdf

倪海夏-人纪-简体针灸教程.pdf

职业精品

精彩专题

结婚彩礼真有那么重要吗?

原创于西周而后沿袭至今的彩礼,虽然被一部分家长奉为圭臬,但越来越多的年轻人对结婚必须要彩礼不以为然。彩礼引发的社会矛盾越来越受到关注,结婚是自己的事,如人饮水冷暖自知,至于要不要彩礼或者要多少彩礼,因人而异,因财力而已,不可一概而论。

用户评论

0/200
    暂无评论
上传我的资料

精选资料

热门资料排行换一换

  • ++姜玉珍:中国古代算命术(大俠…

  • 《周易》八卦图解 大俠藏书.p…

  • 《中国秘传手相术》[张耀文、佐藤…

  • 《易经洗髓》现代整理版.pdf

  • 《无极太极八卦图说全本》郑朝暾+…

  • 《鲁班经》+[风水部分](大俠藏…

  • 《江南易林-周易命理人生探秘》(…

  • 佛法概论.pdf

  • 黃帝內經(外經微言).pdf

  • 资料评价:

    / 14
    所需积分:1 立即下载

    意见
    反馈

    返回
    顶部