2009年8月7日
摘要: Content Provider代表的文件是完全符合URI的,而不是raw文件数据。为了插入一个文件到Content Provider或者访问一个保存了的文件,使用ContentResolver的openOutputStream或openInputStream方法。储存文件的过程如下面的代码片段所示:// Insert a new row into your provider, returning... 阅读全文
posted @ 2009-08-07 17:11 xirihanlin 阅读(1033) 评论(0) 推荐(0) 编辑
摘要: 在Content Provider上执行交互,通过调用ContentResolver对象的delete、update和insert方法。InsertContentResolver提供了两个插入新的记录的方法——insert和bulkInsert。两个方法都接受你想添加的项目类型的URI;前者接受单一的ContentValues对象,后者接受一个数组。简单的insert方法会... 阅读全文
posted @ 2009-08-07 17:09 xirihanlin 阅读(2575) 评论(0) 推荐(0) 编辑
摘要: 和数据库中一样,查询的结果以一个指向结果集的Cursor返回。你可以使用在之前的关于数据库“提取结果”章节中描述的技巧来提取结果。Content Provider的查询传入的参数和数据库查询非常相似。在ContentResolver对象上使用qurey方法,传入:❑ 你想查询的数据的URI。❑ 你想在结果集中包含的列项。❑ where语句,定义了要返回的行。你可以包含?通配... 阅读全文
posted @ 2009-08-07 17:08 xirihanlin 阅读(683) 评论(0) 推荐(0) 编辑
摘要: 通过ContentResolver类来访问Content Provider。接下来的章节演示了如何访问一个Content Reslover,以及如何使用它来查询和与Content Provider交互。另外,还演示了一些使用本地的Android Content Provider的例子。Content Resolver介绍每个应用程序的上下文都有一个ContentResolver,可通过getCon... 阅读全文
posted @ 2009-08-07 17:07 xirihanlin 阅读(663) 评论(0) 推荐(0) 编辑
摘要: Content Provider是一种允许在应用程序间共享数据的一种通用的接口机制。通过对底层数据源的抽象,Content Provider减低了应用程序层与数据层间的耦合,使得应用程序的数据源不可知。Content Provider拥有完全的权限控制并通过一个简单的URI进行访问。共享的数据通过查询获取,同时也支持写入。因此,一个拥有合适权限的应用程序可以添加、删除和更新其它任一应用程序的数据&... 阅读全文
posted @ 2009-08-07 17:06 xirihanlin 阅读(855) 评论(0) 推荐(0) 编辑
摘要: 在本章的前面,你增强了To-Do List例子的功能,能够在会话间保存Activity UI的状态。那只是一半的工作;在接下来的例子里,你将创建一个私有的数据库来保存那些to-do项:1. 创建一个新的ToDoDBAdapter类。它将用于管理你的数据库交互。创建私有的变量来储存SQLiteDatabase对象和调用程序的上下文。添加构造函数来得到所属程序的上下文,并且为数据库的名和版本以及to-... 阅读全文
posted @ 2009-08-07 15:03 xirihanlin 阅读(1179) 评论(0) 推荐(0) 编辑
摘要: SQLiteDatabase类暴露了特定的方法,如insert、delete和update等方法,这些方法包装了执行这些动作所需的SQL语句。尽管如此,execSQL方法允许你在数据库表上执行任何有效的SQL语句,而这些动作就是你想要手动执行的。在任何时候,如果你修改了底层数据库的值,你都应该调用任一在当前表上浏览的Cursor的refreshQuery方法。插入新行为了创建一个新行,构造一个Co... 阅读全文
posted @ 2009-08-07 11:01 xirihanlin 阅读(842) 评论(0) 推荐(0) 编辑
摘要: 通过Cursor来提取实际的值,首先要使用moveTo<位置>方法来将Cursor移动到结果集中正确的行上。在Cursor位于正确的行上的前提下,使用类型安全的get方法(传入一个列索引)来获得储存在当前行、特定列的值,如下面的片段所示:String columnValue = myResult.getString(columnIndex);数据库的实现应该公布列索引的静态变量,这样能... 阅读全文
posted @ 2009-08-07 10:39 xirihanlin 阅读(597) 评论(0) 推荐(0) 编辑
摘要: 所有的数据库查询都返回一个结果集的游标。这种方式使得Android通过在需要的时候检索和释放行和列的值来更加有效地管理资源。执行一个数据库的查询,使用query方法,传入以下参数:❑ 一个可选的布尔值来指定结果集中每一行是否是独一无二的。❑ 需要查询的表的名字❑ 一个字符串数组,标明在结果集中包含的列项。❑ 一个where语句来定义要返回的行。你可以包含?通配符,它会被selectionArgs参... 阅读全文
posted @ 2009-08-07 10:25 xirihanlin 阅读(778) 评论(0) 推荐(0) 编辑
摘要: 当你设计你的数据库时,这里有几点建议你应该考虑一下:❑ 文件(例如位图或音频文件)一般不储存在数据库的表中。一般用字符串来存储文件的路径,最好是一个正确的Content Provider URI。❑ 当没有严格的需求时,强烈建议所有的表中都包含一个自动增加的关键字段,它可以用作每行的独一无二的索引值。值得注意的是,当你计划用Content Provider来共享你的表,那么,独一无二的ID字段是必... 阅读全文
posted @ 2009-08-07 09:42 xirihanlin 阅读(2033) 评论(0) 推荐(0) 编辑
摘要: 你可以在程序上下文中用openOrCreateDatabase方法来创建和打开一个数据库,而不用借助SQLiteOpenHelper类的帮忙。建立一个数据库包括两个步骤。第一,调用openOrCreateDatabase来创建一个新的数据库。然后,在返回的数据库实例上调用execSQL方法来运行SQL命令行,它将创建你的表单和相互之间的关系。一般的过程如下面的片段所示:private static... 阅读全文
posted @ 2009-08-07 09:31 xirihanlin 阅读(6067) 评论(4) 推荐(1) 编辑
摘要: SQLiteOpenHelper是包装了数据库的创建、打开和更新的抽象类。通过实现和使用SQLiteOpenHelper,你可以隐去在数据库打开之前需要判断数据库是否需要创建或更新的逻辑。上面的代码片段显示了如何扩展SQLiteOpenHelper类,通过重写构造函数、onCreate和onUpgrade方法来处理新的数据库的创建和更新到新的版本。在前一个例子中,onUpgrade只是简单的丢弃了... 阅读全文
posted @ 2009-08-07 09:24 xirihanlin 阅读(9231) 评论(1) 推荐(2) 编辑