Android 系统中SQLite 数据库的研究

时间:2022-06-01 03:57:04

Android 系统中SQLite 数据库的研究

摘要:Android操作系统中集成了SQLite数据库,首先简单介绍了Android系统的基本构架;然后重点分析了SQLite数据库的原理及应用;最后通过设计一个利用SQLite数据库的移动课程表软件实例,对该应用进行了有效验证。

关键词:Android;SQLite;数据库

中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2013)28-6243-03

1 概述

国内移动互联网已经进入高速发展的时代,3G网络的逐渐普及以及硬件性能的不断提升,使智能手机成为了耀眼的明星。智能手机不仅拥有普通手机传统的通信能力,而且更拥有强大的计算能力,允许用户安装和运行更为高级的应用程序,运行完整的操作系统,为应用程序开发提供完整的平台。简言之,智能手机和一台普通的个人电脑没有多大区别,就是一个能打电话的小型笔记本电脑。目前主流手机中的操作系统除苹果以外,多以Android为主,而基于Android平台的软件开发很多都离不开数据的存储和操作。只有深入理解和掌握了Android系统中数据的处理,才能开发出优秀的应用软件。

2 Android系统构架

Android操作系统将体系结构分为4层,应用层、应用框架层、系统运行库层以及Linux内核层,如图1所示。我们所开发的Android应用程序都是通过应用程序框架来与Android底层进行交互的,所以开发中接触最多的部分就是应用程序框架。

3 Android开发中使用SQLite数据库

Android操作系统中集成了SQLite数据库。SQLite是一款非常流行的嵌入式数据库,它不仅性能很好,而且只消耗很少的内存;另外它还是开源的,任何人都可以使用它。

Android应用程序实际上也是Java程序,对于Java程序员来说,数据库的操作自然想到用JDBC。但是与传统的JDBC连接数据库的方式不同,Android提供了一些新的API来操作SQLite数据库。因为JDBC占用太多的系统资源,所以JDBC对于手机或Pad这类内存受限的设备来说并不合适。

3.1 创建数据库

跟其他应用程序一样,要想使用SQLite,必须先创建数据库。Android中操作数据库的最主要的API是SQLiteOpenHelper类,要想创建数据库必须继承这个类。根据开发应用程序的需要,SQLiteOpenHelper类中封装了创建和更新数据库的各种逻辑和方法。它的子类至少需要重写三个方法:构造函数,onCreate()方法,以及onUpgrage()方法。

例如如下代码:

public class DBHelper extends SQLiteOpenHelper {

DBHelper(Context c, String DB, CursorFactory CF, int v) {

super(c, "stu.db", null, 2);

}

public void onCreate(SQLiteDatabase db) {

//操作数据库

}

public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

//更改数据库版本

}}

以上DBHelper类继承了SQLiteOpenHelper类,并重写了构造函数,onCreate()方法,和onUpgrage()方法,在SQLite中创建了一个名为stu.db的数据库。

3.2 创建表

Android系统中创建表的操作可由SQLiteDatabase类来实现,该类的execSQL()方法以一个DDL类型的SQL语句作为参数,用来执行该DDL语句。

例如,如下代码:

SQLiteDatabase mydb = databaseHelper.getWritableDatabase();

mydb.execSQL("CREATE TABLE myuser

(userid INTEGER PRIMARY KEY AUTOINCREMENT, username TEXT, pwd TEXT);");

执行这些语句后,会在数据库中创建一个名为myuser的表。该表第一个字段名为userid,并且是主键,自增长整数类型(即当插入一行数据时,SQLite会给这列自动赋值);第二个字段名为username,字符类型;第三个字段名为pwd,也是字符类型。

同样,删除表也需要使用这个方法来调用DROP TABLE语句。

例如,如下代码:

mydb.execSQL("DROP TABLE myuser;");

执行这条语句后,将删除myuser表。

3.3 填充数据

给表添加数据可以有两种方法来实现。

1) 一种方法是使用SQLiteDatabase类的execSQL()方法执行INSERT,UPDATE,DELETE等SQL语句来更新表的数据。例如:

mydb.execSQL("INSERT INTO myuser (username, pwd) VALUES('admin', '123')") ;

执行该语句可向myuser表中添加一条记录,这条记录的username字段值为admin,pwd字段值为123。因为userid为自增类型,所以程序无须添加该字段值。

mydb.execSQL("UPDATE myuser SET pwd='abc' WHERE username='admin' ") ;

执行该语句将username='admin'记录的pwd字段值修改为abc。

mydb.execSQL("DELETE FROM myuser WHERE username='admin' ") ;

执行该语句将username='admin'的记录删除掉。

实际上,execSQL()方法适用于所有不返回结果的SQL语句。

2) 另一种方法是使用SQLiteDatabase类的insert(),update(),delete()方法。这些方法把SQL语句的一部分作为参数。

例如以下代码也是向myuser表中添加一条记录:

ContentValues mycv=new ContentValues();

mycv.put(Constants.username, "admin");

mycv.put(Constants.pwd, "123");

mydb.insert("myuser ", getNullColumnHack(), mycv);

update()方法实现对表的更新,该方法中使用表名、可选的WHERE条件和相应的填充WHERE条件的字符串作为参数,例如以下代码修改myuser表中指定条件的记录:

mydb.update("myuser ", replacements, " username =?", new String[] {"admin"});

delete()方法的使用和update()类似,例如以下代码删除myuser表中指定条件的记录:

mydb.delete("myuser", " username =?", new String[]{"admin"});

3.4 查询数据

从SQLite数据库中查询数据也有两种方法来实现。

1) 使用rawQuery()方法直接调用SELECT语句;

例如查询SQLite系统表(sqlite_master),检查myuser表是否存在。返回值是一个cursor对象。

Cursor result=mydb.rawQuery("SELECT name FROM sqlite_master WHERE type='table' AND name= 'myuser' ", null);

但是,如果查询是动态的,例如,暂时不确定要查询哪些列,那么使用这个方法就无法完成。这时候就要使用query()方法。

2) 使用query()方法构建一个查询。

query() 方法把SELECT 语句中各个子句内容作为参数,但除了表名以外,其他参数都可以是 null。例如以下代码:

String[] columns={"userid", "username"};

String[] parms={"admin"};

Cursor result=mydb.query("myuser", columns, " username=?",parms, null, null, null);

4 SQLite数据库设计实例

本文基于以上理论分析研发出一个基于Android操作系统和SQLite数据库的移动课程表软件,主要功能有:录入课程信息、删除课程信息、查询课程信息等。数据表如表1所示。

本系统采用面向对象设计思想,程序上设计了4个java类,分别用于实现对SQLite数据库的各项操作,每个类的详细信息如下表2所示。

本系统将课程表功能集成于Android手机中,非常小巧方便。运行效果如图2所示。

5 结束语

通过对以上的研究和分析,可以看到使用SQLite来对Android应用程序进行数据存储和操作是一种非常好的选择。该文介绍了Android应用程序的基本构架,并重点介绍了SQLite数据库的原理和各种操作方法,最后用一个实例验证了其可行性。了解Android开发中SQLite数据库的操作,对开发出优秀的Android应用程序有着重要的指导意义。

参考文献:

[1] 李兴华. Android开发实战经典[M].北京:清华大学出版社,2012:291-293.

[2] 余志龙. Android SDK开发范例大全[M].北京:人民邮电出版社,2010:153-154.

[3] 周巍.Android平台下基于SQLite数据库的手机游戏设计与研究[D].昆明:昆明理工大学,2011.

上一篇:粉细砂的工程特性及其在筑堤工程中的应用 下一篇:基于医学物联网的远程人体感知与监测技术应用...