浅谈SQLite数据库技术在Android平台的应用 下载本文

浅谈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目录中创建