当前位置:文档之家› 第十三讲 SQL实战

第十三讲 SQL实战


SQLite简介 简介
实现了多数的SQL-92标准,包括事务,就是代表原 子性、一致性、隔离性和持久性的(ACID),触发 器和多数的复杂查询。不进行类型检查。你可以把字 符串插入到整数列中。 SQLite 不支持一些标准的 SQL 功能,特别是外键约 束(FOREIGN KEY constrains),嵌套 transcaction 和 RIGHT OUTER JOIN 和 FULL OUTER JOIN, 还有一些 ALTER TABLE 功能。
获得数据库
调用SQLiteOpenHelper 类的 getReadableDatabase() 或 getWriteableDatabase() 方法,你可以得到 SQLiteDatabase 实例。
db=(new DatabaseHelper(getContext())).getWritableDatabase(); return (db == null) ? false : true;
URI
A:标准前缀,用来说明一个Content Provider控制这些数据; B:URI的标识,它定义了是哪个Content Provider提供这些数据。 对于第三方应用程序,为了保证URI标识的唯一性,它必须是一个 完整的、小写的 类名。这个标识在<provider> 元素的 authorities 属性中说明: <provider name=”.TransportationProvider” authorities=”com.example.transp ortationprovider” . . . > C:路径,Content Provider使用这些路径来确定当前需要什么类型 的数据; D:如果URI中包含,表示需要获取的记录的ID;如果没有ID,就表 示返回全部;
ContentProvider
组织应用程序的数据; 组织应用程序的数据; 向其他应用程序提供数据; 向其他应用程序提供数据;
ContentResolver
获取ContentProvider提供的数据; 提供的数据; 获取 提供的数据 修改/添加 删除更新数据等; 添加/删除更新数据等 修改 添加 删除更新数据等;
Android与SQLite 与
Android 在运行时集成了 SQLite,所以每个 Android 应用程序都可以使用 SQLite 数据库。 Android 提供了一些新的 API 来使用 SQLite 数据库,Android 开发中,程序员需要学使用 这些 API。 数据库存储在 data/< 项目文件夹 >/databases/ 下。
给表添加数据
update()方法有四个参数,分别是表名,表示列名和 值的 ContentValues 对象,可选的 WHERE 条件和可 选的填充 WHERE 语句的字符串,这些字符串会替换 WHERE 条件中的“?”标记。 update() 根据条件,更新指定列的值,所以用 execSQL() 方法可以达到同样的目的。 WHERE 条件和其参数和用过的其他 SQL APIs 类似。 例如: String[] parms=new String[] {"this is a string"}; db.update("widgets", replacements, "name=?", parms); delete() 方法的使用和 update() 类似,使用表名,可选 的 WHERE 条件和相应的填充 WHERE 条件的字符串。
SQLite客户端管理工具 客户端管理工具
火狐插件 Sqlite Manger /p/sqlite-manager/
SQLite结构 结构
SQLite结构 结构
接口(Interface) 接口 接口由SQLite C API组成,也就是说不管是程序、脚本语言还是库文件,最终都是通过它C最后也会转化为相应C API的调用)。 编译器(Compiler) 编译器 在编译器中,分词器(Tokenizer)和分析器(Parser)对SQL进行语法检查,然后把它转化为 底层能更方便处理的分层的数据结构---语法树,然后把语法树传给代码生成器(code generator)进行处理。而代码生成器根据它生成一种针对SQLite的汇编代码,最后由虚拟机 (Virtual Machine)执行。 虚拟机(Virtual Machine) 虚拟机 架构中最核心的部分是虚拟机,或者叫做虚拟数据库引擎(Virtual Database Engine,VDBE)。 它和Java虚拟机相似,解释执行字节代码。VDBE的字节代码由128个操作码(opcodes)构成, 它们主要集中在数据库操作。它的每一条指令都用来完成特定的数据库操作(比如打开一个表 的游标)或者为这些操作栈空间的准备(比如压入参数)。总之,所有的这些指令都是为了满足 SQL命令的要求(关于VM,后面会做详细介绍)。 后端(Back-End) 后端 后端由B-树(B-tree),页缓存(page cache,pager)和操作系统接口(即系统调用)构成。B-tree 和page cache共同对数据进行管理。B-tree的主要功能就是索引,它维护着各个页面之间的 复杂的关系,便于快速找到所需数据。而pager的主要作用就是通过OS接口在B-tree和Disk 之间传递页面。
绑定到listview 绑定到
SimpleCursorAdapter的构造函数接受下面5个 参数:
context:对当前Activity的引用 layout:一个资源,它定义一个列表条目的视图 cursor:数据集光标 from:一组列名称,数据来源于这些列 to:视图列表,这是数据的目的地
Android 应用程序之间数据共享
SQL 实战
SQLite简介 简介
SQLite是遵守ACID的关系数据库 关系数据库管理系统, 关系数据库 它包含在一个相对小的C库中。它是 D.RichardHipp创建的开源项目。 不像常见的客户端 服务器结构 客户端/服务器结构 客户端 服务器结构数据库, SQLite引擎不是个程序与之通信的独立进程, 而是连接到程序中成为它的一个主要部分。主 要的通信协议是在编程语言内的直接API调用。
ContentProvider
Android提供了ContentProvider,一个程序可 以通过实现一个ContentProvider的抽象接口将 自己的数据完全暴露出去,而且 ContentProviders是以类似数据库中表的方式 将数据暴露,也就是说ContentProvider就像一 个“数据库”。 那么外界获取其提供的数据,也就应该与从数 据库中获取数据的操作基本一样,只不过是采 用URI来表示外界需要访问的“数据库”。
查询数据库查询数据库
使用 rawQuery() 直接调用 SELECT 语句 Cursor c=db.rawQuery( "SELECT name FROM sqlite_master WHERE type='table' AND name='mytable'", null); 使用 query() 方法构建一个查询 String[] columns={"ID", "inventory"}; String[] parms={"snicklefritz"}; Cursor result=db.query("widgets", columns, "name=?",parms, null, null, null);
ContentProvider的抽象接口 的抽象接口
onCreate() which is called to initialize the provider query(Uri, String[], String, String[], String) which returns data to the caller insert(Uri, ContentValues) which inserts new data into the content provider update(Uri, ContentValues, String, String[]) which updates existing data in the content provider delete(Uri, String, String[]) which deletes data from the content provider getType(Uri) which returns the MIME type of data in the content provider
创建表和索引
为了创建表和索引,需要调用 SQLiteDatabase 的 execSQL() 方法来执行 DDL 语句。 db.execSQL("CREATE TABLE mytable (_id INTEGER PRIMARY KEY AUTOINCREMENT, title TEXT, value REAL);");
使用 SQLite 数据库
Activites 可以通过 Content Provider 或者 Service 访问一个数据库。
创建数据库
Android 提供了 SQLiteOpenHelper 帮助创建一个数据库,只要继 承 SQLiteOpenHelper 类,就可以轻松的创建数据库。 SQLiteOpenHelper 类根据开发应用程序的需要,封装了创建和更 新数据库使用的逻辑。SQLiteOpenHelper 的子类,至少需要实现 三个方法: 构造函数,调用父类 SQLiteOpenHelper 的构造函数。这个方法 需要四个参数:上下文环境(例如,一个 Activity),数据库名字, 一个可选的游标工厂(通常是 Null),一个代表你正在使用的数 据库模型版本的整数。 onCreate()方法,它需要一个 SQLiteDatabase 对象作为参数, 根据需要对这个对象填充表和初始化数据。 onUpgrage() 方法,它需要三个参数,一个 SQLiteDatabase 对象, 一个旧的版本号和一个新的版本号,这样你就可以清楚如何把一 个数据库从旧的模型转变到新的模型。
相关主题