1、浅谈SQLite数据库技术在Android平台的应用【】在当今的数字世界中, 的应用范围越来越广。在 这种特殊设备里,经常会存取一些数据,例如:音频文件、视频文件、图片文件和通讯录等数据。Android作为一种 操作系统,提供如下几种存取数据的方式:Preference(配置)、File(文件)、SQLite数据库和网络等。本文将着重阐述SQLite数据库技术在Android平台的应用。【关键词】SQLite;Sqliteman;ADB Shell;Android;SQLiteDatabase1.引言SQLite是轻量级的嵌入式关系型数据库,目前已经在iPhone、Android等 系统中使用
2、。SQLite具有可移植性好,易用,占用存储空间小,高效可靠等特点。SQLite嵌入到使用的应用程序中,它们共用相同的进程空间,而不是单独的一个进程。从外部看,它并不像一个RDBMS,但在进程内部,它却是完整的,自包含的数据库引擎。2.SQLite原理与运行环境2.1 SQLite根本原理在SQLite内部,SQLite由以下几个组件组成:SQL编译器、内核、后端以及附件。SQLite通过利用虚拟机和虚拟数据库引擎,使调试、修改和扩展SQLite的内核变得更加方便,所有SQL语句被编译成可以在SQLite虚拟机中执行的程序集。2.2 SQLite运行环境Android SDK包含了假设干有用的
3、SQLite数据库管理类。它们中的许多都存在于android.database.sqlite包中。其中,可以发现许多功能包类,比方SQLiteDatabase类提供了创立和使用SQLite数据库的API。SQLiteOpenHelper是SQLiteDatabase的一个帮助类,用于管理数据库的创立和版本更新。3.SQLite创立与管理3.1 使用Sqliteman创立和管理SQLite数据库Sqliteman是一款方便易用的图形化sqlite数据库工具。该软件有着全面的Sqlite功能,适用于所有平台,而且完全免费提供给用户使用。下面以txl数据库的创立和管理为例进行说明。(1)运行sqli
4、teman.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 输入字段、数
5、据类型和默认值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,类似Win
6、dows命令提示符中的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目录下,这样方便发布系统的时候,将数据库一同发布。
7、当 应用程序安装并运行时,数据库会从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目录是否存在,不存在那么创
8、立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)和
9、删除(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方法可以创立一个不存在的数据库,或翻开一个已创立的数据库,并返回一个S
10、QLiteData base对象,其中第一个参数为数据库路径,第二个参数为访问权限,第三个参数是指定返回一个Cursor子类的工厂,如果未指定(null)那么使用默认工厂。(2)插入数据插入数据有两种方法:一种是调用SQLite Database的insert(String table,String nullColumnHack,CotentValues values)方法,该方法的第一个参数是表名称,第二个参数是空列的默认值,第三个参数是ContentValues类型的一个封装了列名称和列值的Map;另一种方法是编写插入数据的SQL语句,直接调用SQLiteDatabase的exeSQL()
11、方法来执行。第二种方法例如代码如下: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)修改数据和插入数据类似,修改数据也有两种方式。一是调用SQLiteData
12、base的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_
13、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)方法,该方法
14、的第一个参数是表名称,第二个参数是删除条件,第三个参数是删除条件数组;另一种方法是编写删除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 selectionArg
15、s) 方法,第一个参数是查询SQL语句,第二个参数是查询参数所对应的数组。此方法执行成功后返回一个游标(Cursor)对象,例如代码如下:public static Cursor findLxr(int int_id)String strsql=;strsql=SELECTxFROM 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.北京:人民邮电出版社,2022.2郭宏志.Android应用开发详解M.北京:电子工业出版