资源预览内容
第1页 / 共8页
第2页 / 共8页
第3页 / 共8页
第4页 / 共8页
第5页 / 共8页
第6页 / 共8页
第7页 / 共8页
第8页 / 共8页
亲,该文档总共8页全部预览完了,如果喜欢就下载吧!
资源描述
Android开发中使用SQLite 数据库简介:SQLite是一款非常流行的嵌入式数据库,它支持SQL查询,并且只用很少的内存。An droid在运行时集成了 SQLite,所以每个 An droid应用程序都可以使用SQLite数据库。对数熟悉 SQL的开发人员来时,使用SQLite相当简单。可以,由于JDBC不适合手机这种内存受限设备,所以An droid开发人员需要学习新的API来使用SQLite。本文主要讲解SQLite在An droid环境中的基本使用。SQLite介绍SQLite 一个非常流行的嵌入式数据库,它支持SQL语言,并且只利用很少的内 存就有很好的性能。此外它还是开源的,任何人都可以使用它。许多开源项目(Mozilla, PHP, Python)都使用了 SQLite.SQLite由以下几个组件组成:SQL编译器、内核、后端以及附件。SQLite通过 利用虚拟机和虚拟数据库引擎 (VDBE,使调试、修改和扩展SQLite的内核变 得更加方便。图1. SQLite内部结构Token i2erFJarserCodeGeneratorUtilitiesTest CodeOS InterTaoeB-TreePagerSQLite基本上符合SQL-92标准,和其他的主要SQL数据库没什么区别。它的 优点就是高效,An droid运行时环境包含了完整的SQLite。SQLite和其他数据库最大的不同就是对数据类型的支持,创建一个表时,可以 在CREATETABLE语句中指定某列的数据类型, 但是你可以把任何数据类型放入 任何列中。当某个值插入数据库时,SQLite将检查它的类型。如果该类型与关 联的列不匹配,则SQLite会尝试将该值转换成该列的类型。 如果不能转换,则 该值将作为其本身具有的类型存储。比如可以把一个字符串(String )放入INTEGER列o SQLite 称这为“弱类型” (manifest typing.)。此外,SQLite不支持一些标准的SQL功能,特别是外键约束(FOREIGN KEY constrains ),嵌套 transcaction 和 RIGHT OUTEROIN 和 FULL OUTEROIN, 还有一些ALTER TABLE功能。除了上述功能外,SQLite是一个完整的SQL系统,拥有完整的触发器,交易等An droid集成了 SQLite数据库An droid在运行时(run-time )集成了 SQLite,所以每个An droid 应用程序都 可以使用SQLite数据库。对于熟悉SQL的开发人员来时,在An droid开发中 使用SQLite相当简单。但是,由于JDBC会消耗太多的系统资源,所以JDBC对 于手机这种内存受限设备来说并不合适。因此,An droid提供了一些新的API来 使用SQLite数据库,An droid开发中,程序员需要学使用这些 API。数据库存储在data/v 项目文件夹/databases/ 下。An droid开发中使用SQLite数据库Activites可以通过Co nte nt Provider或者Service 访问一个数据库。下面会详细讲解如果创建数据库,添加数据和查询数据库。创建数据库An droid不自动提供数据库。在An droid应用程序中使用SQLite,必须自己创 建数据库,然后创建表、索引,填充数据。An droid提供了 SQLiteOpe nH elper帮 助你创建一个数据库,你只要继承SQLiteOpenHelper类,就可以轻松的创建数 据库。SQLiteOpenHelper类根据开发应用程序的需要,封装了创建和更新数据 库使用的逻辑。SQLiteOpenHelper的子类,至少需要实现三个方法:构造函数,调用父类SQLiteOpenHelper的构造函数。这个方法需要四个 参数:上下文环境(例如,一个 Activity ),数据库名字,一个可选的 游标工厂(通常是Null ), 个代表你正在使用的数据库模型版本的整 数。 on Create ()方法,它需要一个SQLiteDatabase 对象作为参数,根据需 要对这个对象填充表和初始化数据。 onUpgrage()方法,它需要三个参数,一个SQLiteDatabase 对象,一个 旧的版本号和一个新的版本号,这样你就可以清楚如何把一个数据库从旧 的模型转变到新的模型。下面示例代码展示了如何继承 SQLiteOpenHelper创建数据库:public class DatabaseHelper exte nds SQLiteOpe nH elper DatabaseHelper(C on text con text, String n ame, CursorFactory cursorFactory, int versi on)super(c on text, n ame, cursorFactory, versi on);Overridepublic void on Create(SQLiteDatabase db) / TODO创建数据库后,对数据库的操作Overridepublic void on Upgrade(SQLiteDatabase db, int oldVersi on, int n ewVersi on) / TODO更改数据库版本的操作Override public void on Ope n( SQLiteDatabase db) super.o nOpe n( db);/ TODO每次成功打开数据库后首先被执行接下来讨论具体如何创建表、插入数据、删除表等等。调用 getReadableDatabase()或 getWriteableDatabase() 方法,你可以得到 SQLiteDatabase实例,具体调用那个方法,取决于你是否需要改变数据库的内 容:db=(new DatabaseHelper(getC on text().getWritableDatabase();return (db = n ull) ? false : true;上面这段代码会返回一个 SQLiteDatabase类的实例,使用这个对象,你就可以 查询或者修改数据库。当你完成了对数据库的操作(例如你的 Activity 已经关闭),需要调用 SQLiteDatabase 的 Close() 方法来释放掉数据库连接。创建表和索引为了创建表和索引,需要调用 SQLiteDatabase 的 execSQL() 方法来执行 DDL 语句。如果没有异常,这个方法没有返回值。例如,你可以执行如下代码:db.execSQL(CREATE TABLE mytable (_id INTEGER PRIMARY KEY AUTOINCREMENT, title TEXT, value REAL););这条语句会创建一个名为 mytable 的表,表有一个列名为 _id ,并且是主键, 这列的值是会自动增长的整数(例如,当你插入一行时, SQLite 会给这列自动 赋值),另外还有两列: title( 字符 ) 和 value( 浮点数 ) 。 SQLite 会自动 为主键列创建索引。通常情况下,第一次创建数据库时创建了表和索引。如果你不需要改变表的schema不需要删除表和索引.删除表和索引,需要使用execSQL()方法调用 DROP INDE麵 DROP TABLE语句。给表添加数据上面的代码, 已经创建了数据库和表, 现在需要给表添加数据。 有两种方法可以 给表添加数据。像上面创建表一样,你可以使用 execSQL() 方法执行 INSERT, UPDATE,DELETE 等语句来更新表的数据。 execSQL() 方法适用于所有不返回结果的 SQL 语句。 例如:db.execSQL(INSERT INTO widgets (name, inventory)+VALUES (Sprocket, 5);另一种方法是使用 SQLiteDatabase 对象的 insert(), update(), delete() 方法。这些方法把 SQL 语句的一部分作为参数。示例如下:ContentValues cv=new ContentValues();cv.put(Constants.TITLE, example title);cv.put(Constants.VALUE, SensorManager.GRAVITY_DEATH_STAR_I);db.insert(mytable, getNullColumnHack(), cv);update ()方法有四个参数,分别是表名,表示列名和值的ContentValues 对象,可选的WHERE条件和可选的填充 WHERE语句的字符串,这些字符串会替换 WHER条件中的“?”标记。update()根据条件,更新指定列的值,所以用 execSQL()方法可以达到同样的目的。WHER条件和其参数和用过的其他SQL APIs类似。例如:Stri ng parms=new Stri ng this is a stri ng;db.update(widgets, replaceme nts, name=?, parms);delete()方法的使用和update() 类似,使用表名,可选的WHERE条件和相应的填充WHERE条件的字符串。查询数据库类似INSERT, UPDATE, DELETE有两种方法使用 SELECT从SQLite 数据库检 索数据。1 使用rawQuery() 直接调用SELECT语句;使用query() 方法构建一个查询。 Raw Queries正如API名字,rawQuery()是最简单的解决方法。通过这个方法你就可以调用SQL SELECT语句。例如:Cursor c=db.rawQuery(SELECT name FROM sqlite_master WHERE type=table ANDn ame=mytable, n ull);在上面例子中,我们查询SQLite 系统表(sqlite_master )检查table 表 是否存在。返回值是一个cursor对象,这个对象的方法可以迭代查询结 果。如果查询是动态的,使用这个方法就会非常复杂。例如,当你需要查询的 列在程序编译的时候不能确定,这时候使用query()方法会方便很多。* Regular Queriesquery() 方法用SELECT语句段构建查询。SELECT语句内容作为query()方法的参数,比如:要查询的表名,要获取的字段名,WHER条件,包含可选的位置参数,去替代 WHERE条件中位置参数的值,GROUP B淙件, HAVING 条件。除了表名,其他参数可以是null。所以,以前的代码段可以可写成:Strin g colum ns=ID, i nven tory;null,String parms=snicklefritz;Cursor result=db.query(widgets, columns, name=?,parms, nuII, n ull);使用游标不
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号