使用封装好的SQLiteAction类能很方便地实现本地数据库操作,甚至不需要熟悉本地数据库操作的API,有关SQLiteAction的内容可以参考http://sunnyluo.iteye.com/blog/800106。以下简单示例是关于使用SQLiteAction类来操作本地数据库sqlite的:
首先创建一个本地数据库“resource/db/sys.db”,并创建一个用户表T_User,字段有用户ID(C_UserID )和用户名(C_UserName),可以插入或删除一条数据。下面就分析一下主要的功能类。
先创建数据库操作服务类:SysdbService.as,所有对于sys.db数据库的操作都封装在这个类里面:
/** *系统数据库操作服务类 */ package examples.sqlite.service { import flash.filesystem.File; import sunnyluo.action.IAction; import sunnyluo.sqlite.SQLiteAction; import sunnyluo.sqlite.SQLiteConnection; public class SysDbService { //系统数据库路径 public static const SYS_DB_PATH:String = File.applicationDirectory.nativePath + "/resource/db/sys.db" public static var sysDbConn:SQLiteConnection = new SQLiteConnection(SYS_DB_PATH); public function SysDbService() { } //创建用户数据表 public static function createUserTable():IAction { var sql:String = "CREATE TABLE IF NOT EXISTS T_User (" + "C_UserID TEXT, "+ "C_UserName TEXT)"; return getAction(sql); } //插入一条数据到用户表里 public static function insertUser(userId_:String, userName_:String):IAction { var sql :String = "INSERT INTO T_User(C_UserID,C_UserName) VALUES('" + userId_+"','"+userName_+"')"; return getAction(sql); } //删除用户表里的一条数据 public static function deleteUser(userId_:String):IAction { var sql : String = "DELETE FROM T_User WHERE C_UserID= '"+userId_+"'"; return getAction(sql); } //更新用户表里的一条数据 public static function updateUser(userId_:String, userName_:String):IAction { var sql:String = "UPDATE T_User SET" + " C_UserID = '"+userId_+"',"+ " C_UserName = '"+userName_+"'"+ " WHERE C_UserID = '"+ userId_+"'"; return getAction(sql); } //获取用户表里的所有数据 public static function getAllUsers():IAction { var sql : String = "SELECT * FROM T_User"; return getAction(sql); } //获取数据库动作 private static function getAction(sql_ : String):IAction { var __action:IAction = new SQLiteAction(sysDbConn, sql_); return __action; } } }
调用服务类SysdbService里的静态方法,如创建用户表并侦听完成事件,只需这样:
//创建用户表 private function createTable():void { var __action:IAction = SysDbService.createUserTable(); ActionUtil.addActionHandler(__action, onTableComplete, onTableError); __action.execute(); function onTableComplete(event:ActionEvent):void { //getData(); //执行其他操作 } function onTableError(event:ActionEvent):void { Alert.show("无法创建用户表!"); } }
如果要获取数据表里的数据,一般都会创建一个action类来封装获取数据的逻辑,并使用VO来存储单条数据,最后返回数组。在例子中,我创建了GetUsersAction类来封装获取所有用户数据的逻辑,并用UserVO来存储用户数据,最后返回了存有所有用户数据的数组:
/** *获取所有用户数据 */ package examples.sqlite.action { import examples.sqlite.service.SysDbService; import examples.sqlite.vo.UserVO; import sunnyluo.action.Action; import sunnyluo.action.ActionEvent; import sunnyluo.action.ActionUtil; import sunnyluo.action.IAction; public class GetUsersAction extends Action { public function GetUsersAction(name_:String="") { super(name_); } override public function execute(event:ActionEvent = null):void { getUsers(); } private function getUsers():void { var __action:IAction = SysDbService.getAllUsers(); ActionUtil.addActionHandler(__action, onComplete, onError); __action.execute(); } //获取用户数据成功 private function onComplete(event:ActionEvent):void { var __result:Array = []; var __userVO:UserVO; var __arr:Array = event.data as Array; var __len:int = __arr ? __arr.length : 0; for (var i:int=0; i < __len; i++) { __userVO=new UserVO(); __userVO.userID=__arr[i].C_UserID; __userVO.userName=__arr[i].C_UserName; __result.push(__userVO); } this.actionCompleteHandler(__result); //返回所有用户数据 } //获取用户数据失败 private function onError():void { this.actionErrorHandler(); } } }
调用GetUsersAction的方法,并把数据赋予给一个List来展示:
//获取所有用户数据 private function getData():void { var __action:IAction = new GetUsersAction(); ActionUtil.addActionHandler(__action, onDataComplete, onDataError); __action.execute(); function onDataComplete(event:ActionEvent):void { var __arr:Array = event.data; _sqliteUI.usersList.dataProvider = __arr; //_sqliteUI.enabled = true; } function onDataError(event:ActionEvent):void { //_sqliteUI.enabled = true; } }
关于数据库其它的操作(如删除数据),在示例中都有涉及到,读者可以下载查看,并做扩展。