【转】AS3连接MYSQL数据库

最近由于制作任务编辑器,需要连接到数据库中进行一些任务数据的操作,而我们存放任务数据的数据库中MYSQL,所以就找了一下AS3接连MYSQL数据库的资料。

找到一个好东西:ActionScript 3 MySql Driver,用SVN的童鞋可以直接checkout: 

http://assql.googlecode.com/svn/trunk/
 
 

为了使用简单,我做了一个简单的包装类(包含一个数据结构):

package  com.easily.ds
{
     public  class  DataBaseData
     {
         public  var  host: String ;
         public  var  port: int ;
         public  var  username: String ;
         public  var  password: String ;
         public  var  database: String ;
     }
}
package  com.easily.util
{
     import  com.easily.ds.DataBaseData;
     import  com.maclema.mysql.Connection;
     import  com.maclema.mysql.Field;
     import  com.maclema.mysql.MySqlResponse;
     import  com.maclema.mysql.MySqlToken;
     import  com.maclema.mysql.ResultSet;
     import  com.maclema.mysql.Statement;
     
     import  flash.events.Event;
     import  flash.events.EventDispatcher;
     
     import  mx.rpc.AsyncResponder;
 
     /**
      * @author Easily
      */
     public  class  DataBase extends  EventDispatcher
     {
         private  var  mDataBase:DataBaseData;
         private  var  mConnection:Connection;
         
         public  function  DataBase(database:DataBaseData)
         {
             mDataBase = database;
         }
         
         public  function  connect(): void
         {
             mConnection = new  Connection(mDataBase.host, mDataBase.port,
                 mDataBase.username, mDataBase.password, mDataBase.database);
             mConnection.addEventListener(Event.CONNECT, onConnected);
             
             mConnection.connect();
             
             function  onConnected(event:Event): void
             {
                 mConnection.removeEventListener(Event.CONNECT, onConnected);
                 
                 dispatchEvent(event);
             }
         }
         
         public  function  disconnect(): void
         {
             mConnection.disconnect();
         }
         
         public  function  select(sql: String , completeHandler:Function, errorHandler:Function = null ): void
         {
             var  st:Statement = mConnection.createStatement();
             var  token:MySqlToken = st.executeQuery(sql);
             var  responder:AsyncResponder = new  AsyncResponder(resultHandler, faultHandler, token);
             token.addResponder(responder);
             
             function  resultHandler(result: Object /*ResultSet*/ , token: Object /*MySqlToken*/ ): void
             {
                 var  data: Array  = [];
                 
                 if  (result is  ResultSet)
                 {
                     var  fieldList: Array  = result.getColumns();
                     while  (result.next())
                     {
                         var  item: Object  = {};
                         for  each  ( var  field:Field in  fieldList)
                         {
                             item[field.getName()] = result.getString(field.getName());
                         }
                         data.push(item);
                     }
                 }
                 
                 completeHandler(data);
             }
             
             function  faultHandler(info: Object , token: Object ): void
             {
                 if  (errorHandler == null ) return ;
                 
                 errorHandler();
             }
         }
         
         public  function  insert(sql: String , completeHandler:Function, errorHandler:Function = null ): void
         {
             var  st:Statement = mConnection.createStatement();
             var  token:MySqlToken = st.executeQuery(sql);
             var  responder:AsyncResponder = new  AsyncResponder(resultHandler, faultHandler, token);
             token.addResponder(responder);
             
             function  resultHandler(result: Object /*MySqlResponse*/ , token: Object /*MySqlToken*/ ): void
             {
                 completeHandler(result.insertID);
             }
             
             function  faultHandler(info: Object , token: Object ): void
             {
                 if  (errorHandler == null ) return ;
                 
                 errorHandler();
             }
         }
         
         public  function  remove(sql: String , completeHandler:Function, errorHandler:Function = null ): void
         {
             var  st:Statement = mConnection.createStatement();
             var  token:MySqlToken = st.executeQuery(sql);
             var  responder:AsyncResponder = new  AsyncResponder(resultHandler, faultHandler, token);
             token.addResponder(responder);
             
             function  resultHandler(result: Object /*MySqlResponse*/ , token: Object /*MySqlToken*/ ): void
             {
                 completeHandler();
             }
             
             function  faultHandler(info: Object , token: Object ): void
             {
                 if  (errorHandler == null ) return ;
                 
                 errorHandler();
             }
         }
     }
}

其中有3个方法,select,insert,remove,分别对应了SQL语句中的select,insert,delete

用法很简单,先连接:

var  databaseData:DataBaseData = new  DataBaseData();    
databaseData.host = "127.0.0.1" ;
databaseData.database = "game" ;
databaseData.password = "123456" ;
databaseData.port = 3306 ;
databaseData.username = "root" ;
 
var  dataBase:DataBase = new  DataBase(databaseData);
dataBase.addEventListener(Event.CONNECT, onConnected);
dataBase.connect();
 
function  onConnected(event:Event): void
{
     dataBase.removeEventListener(Event.CONNECT, onConnected);
     
     dispatchEvent( new  Event(Event.COMPLETE));
}

如果不需要用了可以先断开连接:

dataBase.disconnect();

下面是select语句:

var  sql: String  = "select id,name from `npc`" ;
dataBase.select(sql, endQuery);
 
function  endQuery(data: Array ): void
{
     var  npcList: Array =  [];
     for  each  ( var  item: Object  in  data)
     {
         var  npc: Object  = {id:item.id, name:item.name};
         
         npcList.push(npc);
     }  
}

insert语句用法会返回一个insertID,也就是插入的那条数据的ID。

类-结-构(一部分没有在下表列出) xml: XMLLoader.as ---------------------- 加载xml的类 xmlToArray.as ---------------------- xml换Array util: ArrayUtil.as ---------------------- 数组辅助功能 setFrameout.as ---------------------- 延迟(帧)函数 clearFrameout.as ---------------------- 清除延迟函数 delayOut.as ---------------------- 延迟(秒)函数 EnterFrame.as ---------------------- 类似as2enterFrame NumberUtil.as ---------------------- 逐个递加数字 setFor.as ---------------------- for循环函数体 tryRun.as ---------------------- try catch运行函数 url: Address.as ---------------------- 设置为首页/添加收藏夹/获取地址栏地址并且复制到右键 URL.as ---------------------- 跳html/获取文件地址 Cookies.as ---------------------- shareObject类似cookies HtmCookies.as ---------------------- 真实cookies JavaScript.as ---------------------- javascript交互 HTTPS.as ---------------------- url随机数 SNS.as ---------------------- 各个sns网站的分享 timeline: prevPlay.as ---------------------- 反向/正向播放mc Timeline.as ---------------------- 处理时间轴 time: TimeClick.as ---------------------- 计时器 TimeCount.as ---------------------- 计数器 TimeFormat.as ---------------------- 格式化时间 text: BitmapText.as ---------------------- bitmap文本副本 setDText.as ---------------------- 快速设置动态文本 replaceAll.as ---------------------- 替换字符 MiniFont.as ---------------------- mini字体库 test: MainLoad.as ---------------------- 测试框架 third:(部分第三方类) stage: AutoSize.as ---------------------- 自适应屏幕尺寸 FullScreen.as ---------------------- 控制全屏 StageInit.as ---------------------- 初始化场景 object: AClass.as ---------------------- 获取对象所属的类 all.as ---------------------- 全体对象调整 some.as ---------------------- 遍历并调用对象集属性 move: BasicMove.as ---------------------- 简单的运动方式 mouse: Menu.as ---------------------- 右键菜单 MouseCheck.as ---------------------- 检查鼠标是否移动 load: GroupLoader.as ---------------------- 列队加载一组元素 MCLoader.as ---------------------- loader组件 ProLoader.as ---------------------- 预加载 geom: Rectangular.as ---------------------- 控制目标在矩形区域内 RectangleUI.as.as ---------------------- RectangleUI工具条 events: BasicEvent.as ---------------------- 基本事件模式 ButtonEvent.as ---------------------- button相关的事件 FLVEvent.as ---------------------- FLV相关的事件 LoadEvent.as ---------------------- load相关的事件 ListEvent.as ---------------------- list相关的事件 EventManager.as ---------------------- 强大的事件管理器 draw: Painter.as ---------------------- 绘图类 Pen.as ---------------------- 画笔 SmoothCurve.as ---------------------- 生成光滑曲线 debug: Debug.as ---------------------- 5K Debug trace.as ---------------------- 覆写trace traced.as ---------------------- traced输出 data: DataInterface.as ---------------------- 简化flash和后台交互 ValueMode.as ---------------------- 后台模式 ListPage.as ---------------------- 实现flash列表相关功能 display: addChildAndInit.as ---------------------- 添加显示对象并初始化 ContainerMovieClip.as ------------------ movieClip容器,一般用来存放加载的 DisplayGroup.as ---------------------- 显示对象群组 DisplayHelper.as ---------------------- 处理显示对象简便操作 hitTestObjects.as ---------------------- 像素级碰撞检测 LoaderSprite.as ---------------------- 处理Loader相关的Sprite Registration.as ---------------------- 变换注册点 SubMovieClip.as ---------------------- movieClip基类 QMC.as ---------------------- 快速MovieClip --bitmap: GoodBmp.as ---------------------- 新的bitmap --color: Color.as ---------------------- 颜色工具 --quick: QuickMovieClipArray.as ---------------------- 保存QMC对象 --shell: CoreShell.as ---------------------- 控制显示对象的外壳 fp10(仅支持fp10.0以上版本): --a3d:(--A3D--) A3D.as ---------------------- 参数配置 Ball.as ---------------------- 球 Box.as ---------------------- 盒子 Camera3D.as ---------------------- 摄像机 Container3D.as ---------------------- 3d容器 Plane.as ---------------------- 基本面 Scene3D.as ---------------------- 主场景 --core: FP10Object3d.as ---------------------- 基本3d对象 IFP10Object3d.as ---------------------- 3D对象接口 Light.as ---------------------- 灯光 Material.as ---------------------- 材质 --move: Move.as ---------------------- 运动制作器 OrderTool.as ---------------------- Z轴排序器 zOrder.as ---------------------- Z轴排序函数 ToolMaker.as ---------------------- 3d工具制造器 fp10(仅支持fp10.0以上版本): --upfile JPGLoader.as ---------------------- 本地图片上传保存 JPGEncoder.as ---------------------- 压缩为jpg PNGEncoder.as ---------------------- 压缩为png component: --button: BasicButton.as ---------------------- 基本的按钮MODEL AssociativeButton.as ---------------------- 串联按钮MODEL. ParallelButton.as ---------------------- 并联按钮MODEL LabelButton.as ---------------------- 加标签的按钮 TwoFaceButton.as ---------------------- 两帧型按钮 ButtonManage.as ---------------------- 按钮统一管理器 --interactive: DragComponent.as ---------------------- 拖动功能元件。 MouseFollow.as ---------------------- 一组对象的鼠标跟随 MouseFollowBg.as ---------------------- 跟随鼠标的背景 --media: FLVVideo.as ---------------------- FLV播放器 MP3Sound.as ---------------------- 简单mp3播放器 --mouse: Cursor.as ---------------------- 自定义鼠标指针 --text: InputText.as ---------------------- 设置输入文本 Typewriter.as ---------------------- 打字效果 --ui: BlackMask.as ---------------------- 全屏遮罩 TipBox.as ---------------------- 提示框TipBox ScrollPane.as ---------------------- 滚动窗口组件 SliderLine.as ---------------------- 滚动条组件
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值