|
使用封装好的SQLiteAction类能很方便地实现本地数据库操作,甚至不需要熟悉本地数据库操作的API,有关SQLiteAction的内容可以参考http://sunnyluo.iyunv.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.C_UserID;
__userVO.userName=__arr.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;
}
}
关于数据库其它的操作(如删除数据),在示例中都有涉及到,读者可以下载查看,并做扩展。 |
|