浅谈SQLite数据库技术在Android平台的应用

时间:2022-10-25 05:59:17

浅谈SQLite数据库技术在Android平台的应用

【摘要】在当今的数字世界中,手机的应用范围越来越广。在手机这种特殊设备里,经常会存取一些数据,例如:音频文件、视频文件、图片文件和通讯录等数据。Android作为一种手机操作系统,提供如下几种存取数据的方式:Preference(配置)、File(文件)、SQLite数据库和网络等。本文将着重阐述SQLite数据库技术在Android平台的应用。

【关键词】SQLite;Sqliteman;ADB Shell;Android;SQLiteDatabase

1.引言

SQLite是轻量级的嵌入式关系型数据库,目前已经在iPhone、Android等手机系统中使用。SQLite具有可移植性好,易用,占用存储空间小,高效可靠等特点。SQLite嵌入到使用的应用程序中,它们共用相同的进程空间,而不是单独的一个进程。从外部看,它并不像一个RDBMS,但在进程内部,它却是完整的,自包含的数据库引擎。

2.SQLite原理与运行环境

2.1 SQLite基本原理

在SQLite内部,SQLite由以下几个组件组成:SQL编译器、内核、后端以及附件。SQLite通过利用虚拟机和虚拟数据库引擎,使调试、修改和扩展SQLite的内核变得更加方便,所有SQL语句被编译成可以在SQLite虚拟机中执行的程序集。

2.2 SQLite运行环境

Android SDK包含了若干有用的SQLite数据库管理类。它们中的许多都存在于android.database.sqlite包中。其中,可以发现许多功能包类,比如SQLiteDatabase类提供了创建和使用SQLite数据库的API。SQLiteOpenHelper是SQLiteDatabase的一个帮助类,用于管理数据库的创建和版本更新。

3.SQLite创建与管理

3.1 使用Sqliteman创建和管理SQLite数据库

Sqliteman是一款方便易用的图形化sqlite数据库工具。该软件有着全面的Sqlite功能,适用于所有平台,而且完全免费提供给用户使用。下面以txl数据库的创建和管理为例进行说明。

(1)运行sqliteman.exe程序打开Sqliteman数据库管理系统,点击“File”菜单下的“Open”命令,出现如图2-1所示的界面,在文件名中输入数据库的名称txl,并点击“保存”按钮。

图2-1 输入要创建的数据库文件名称

(2)此时在出现树形结构的菜单中,选择“Tables”,右击鼠标选择“Create Table”命令,在出现的窗口中输入表名“tbl_txl”以及要创建的字段、数据类型和默认值,如图2-2所示,然后点击“Create”按钮,则创建了名为“tbl_txl”的数据表。

(3)退出Sqliteman数据库管理系统,然后重新进入,在出现树形结构的菜单中,可以实现对txl数据的管理。

图2-2 输入字段、数据类型和默认值

3.2 使用ADB Shell管理SQLite数据库

Android Debug Bridge(ADB)是Android的一个通用调试工具。它既可以更新设备或模拟器中代码和管理预定端口,又可以在设备上运行shell命令。Android基于Linux内核,其内部文件结构采用Linux文件组织方式,因此可以使用shell来访问Android应用中的Sqlite数据库文件。

(1)运行cmd,运行adb.exe,加上参数shell,出现#号就代表进入了shell命令模式,注意:ADB要在Android模拟器运行时才能进入shell。

(2)在shell中,有两个基本命令ls和cd,类似Windows命令提示符中的dir和cd,代表列出当前目录下文件列表和进入到指定目录。通过使用ls命令浏览目录结构,然后使用cd命令可进入目录data/data/com.tl.hellworld2/databases。

(3)找到数据库txl后,键入sqlite3 txl就可进入SQLite管理模式,通过命令可对txl数据库进行管理。

4.SQLite实现与应用

4.1 SQLite数据库部署

在Android系统中,数据库的默认目录一般是存放在data/data/应用程序包名/databases下。通常情况下,数据库是存放在手机应用程序目录下的res/raw目录下,这样方便系统的时候,将数据库一同。当手机应用程序安装并运行时,数据库会从res/raw目录复制到data/data/应用程序包名/databases下,方便系统对数据库进行访问。以下是SQLite数据库部署的部分程序代码:

private void CopyAndLoadDB(){

java.io.File dir = new java.io.File ("data/data/"+getPackageName()+"/databases");

if(!dir.exists() || !dir.isDirectory()){

dir.mkdir();//判断data/data/com.tl.hellworld2/databases目录是否存在,不存在则创建}

java.io.File file = new java.io.File (dir,"txl");

if(!file.exists()){

//判断data/data/com.tl.hellworld2/databases/txl文件是否存在,不存在则从res/raw目录中创建

FileUtil.loadDbFile(R.raw.txl,file,this.getResources());}}

4.2 SQLite技术的实现

Android提供了一个名为SQLiteDatabase的类,该类封装了一些操作数据库的API,使用该类可以完成对数据进行添加(Create)、查询(Retrieve)、更新(Update)和删除(Delete)等操作。execSQL()方法可以执行insert、delete、update和CREATE TABLE之类有更改行为的SQL语句;rawQuery()方法用于执行select语句。

(1)打开或创建数据库

public static void openDataBase(Activity act)

{mSQLiteDatabase

=act.openOrCreateDatabase(DATABASE_NAME,act.MODE_PRIVATE,null);}

在以上代码中,通过openOrCreateData base方法可以创建一个不存在的数据库,或打开一个已创建的数据库,并返回一个SQLiteData base对象,其中第一个参数为数据库路径,第二个参数为访问权限,第三个参数是指定返回一个Cursor子类的工厂,如果未指定(null)则使用默认工厂。

(2)插入数据

插入数据有两种方法:一种是调用SQLite Database的insert(String table,String nullColumnHack,CotentValues values)方法,该方法的第一个参数是表名称,第二个参数是空列的默认值,第三个参数是ContentValues类型的一个封装了列名称和列值的Map;另一种方法是编写插入数据的SQL语句,直接调用SQLiteDatabase的exeSQL()方法来执行。第二种方法示例代码如下:

public static void addLxr(String str_xm,String str_xb,String str_dh,String str_jtzz) {

String strsql="INSERT INTO tbl_txl (xm,xb,dh,jtzz) VALUES('"+ str_xm +"','"+ str_xb +"','"+str_dh+"','"+str_jtzz+"')";

mSQLiteDatabase.execSQL(strsql);}

运行结果如图3-1所示:

图3-1 插入数据运行结果

(3)修改数据

和插入数据类似,修改数据也有两种方式。一是调用SQLiteDatabase的update(String table,ContentValues values,String where Clause,String[] whereArgs)方法。该方法的第一个参数是表名称,第二个参数是更新列ContentValues类型的键值对(Map),第三个参数是更新条件(where子句),第四个参数是更新条件值数组。二是编写更新的SQL语句,调用SQLiteDatabase的execSQL执行更新。第二种方法示例代码如下:

public static void gxLxr(String str_xm,String str_xb,String str_dh,String str_jtzz,int _id){

String strsql="UPDATE tbl_txl SET xm='" +str_xm +"',xb='"+str_xb+"',dh='"+str_dh+"',jtzz='"+str_jtzz+"' WHERE _id="+Integer.toString(_id);

mSQLiteDatabase.execSQL(strsql);}

运行结果如图3-2所示:

图3-2 修改数据运行结果

(4)删除数据

和插入修改数据类似,删除数据也有两种方法:一种是调用SQLiteDatabase的delete(String table,String whereClause,String[] whereArgs)方法,该方法的第一个参数是表名称,第二个参数是删除条件,第三个参数是删除条件数组;另一种方法是编写删除SQL语句,调用SQLiteDatabase的execSQL()方法来执行删除。第二种方法示例代码如下:

public static void scLxr(int _id){

String strsql="DELETE FROM tbl_txl WHERE _id=" + Integer.toString(_id);

mSQLiteDatabase.execSQL(strsql);}

(5)查询数据

查询数据使用SQLiteDatabase的rawQuery (String sql, String[] selectionArgs) 方法,第一个参数是查询SQL语句,第二个参数是查询参数所对应的数组。此方法执行成功后返回一个游标(Cursor)对象,示例代码如下:

public static Cursor findLxr(int int_id){

String strsql="";

strsql="SELECT*FROM tbl_txl WHERE _id=" + Integer.toString(int_id);

Cursor cur_lxr = mSQLiteDatabase.rawQuery(strsql, null);

return cur_lxr;}

运行结果如图3-3和图3-4所示。

图3-3 未输入查询条件查询结果

图3-4 输入查询条件“唐”查询结果

5.结束语

综上所述,SQLite数据库在手机等嵌入式设备上的使用是嵌入式设备数据存储技术的重大革新。相信随着科技的进一步发展,嵌入式数据库技术所使用频率将会越来越高,将会具有更强大的功能和更高效的性能,会使我们的手机应用世界更加丰富多彩。

参考文献

[1](美)达西(Darcey,L.),(美)康德尔(Conder,S.)著.李卉,张魏,祝延彬译.Android移动开发一本就够[M].北京:人民邮电出版社,2011.

[2]郭宏志.Android应用开发详解[M].北京:电子工业出版社,2010.

[3](美)康德尔(Conder,S.),(美)达西(Darcey,L.)著.张魏,李卉译.Android移动应用开发从入门到精通[M].北京:人民邮电出版社,2010.

[4]余志龙,王世江.Google Android SDK开发范例大全[M].北京:人民邮电出版社,2009.

作者简介:唐磊(1983―),男,重庆人,助教,现供职于重庆三峡职业学院现代教育技术中心,主要研究方向:计算机网络及软件开发。

上一篇:在京津冀协同发展背景下如何提升保定文化软实... 下一篇:健康教育联合生活方式干预对高血压的控制评价