如何将AS3连接到MySQL数据库上

 2022-10-27    402  

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

扩张阅读:

如何将AS3连接到MySQL数据库上

ActionScript简称“AS”——动作脚本,是遵循 ECMAscript第四版 的 Adobe Flash Player 运行时环境的编程语言。它在 Flash 内容和应用程序中实现交互性、数据处理以及其他功能。 ActionScript是Flash的脚本语言,与JavaScript相似,ActionScript是一种编程语言,新出的AS3.0使用OOP(面对对象编程),增加更强的报错能力,指定类型也更明确。

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

http://assql.googlecode.com/svn/trunk/为了使用简单,我做了一个简单的包装类(包含一个数据结构):

packagecom.easily.ds 

{ 

publicclassDataBaseData 

{ 

publicvarhost:String; 

publicvarport:int; 

publicvarusername:String; 

publicvarpassword:String; 

publicvardatabase:String; 

} 

}
packagecom.easily.util 

{ 

importcom.easily.ds.DataBaseData; 

importcom.maclema.mysql.Connection; 

importcom.maclema.mysql.Field; 

importcom.maclema.mysql.MySqlResponse; 

importcom.maclema.mysql.MySqlToken; 

importcom.maclema.mysql.ResultSet; 

importcom.maclema.mysql.Statement; 

 

importflash.events.Event; 

importflash.events.EventDispatcher; 

 

importmx.rpc.AsyncResponder; 

 

/** 

*@authorEasily 

*/ 

publicclassDataBaseextendsEventDispatcher 

{ 

privatevarmDataBase:DataBaseData; 

privatevarmConnection:Connection; 

 

publicfunctionDataBase(database:DataBaseData) 

{ 

mDataBase=database; 

} 

 

publicfunctionconnect():void 

{ 

mConnection=newConnection(mDataBase.host,mDataBase.port, 

mDataBase.username,mDataBase.password,mDataBase.database); 

mConnection.addEventListener(Event.CONNECT,onConnected); 

 

mConnection.connect(); 

 

functiononConnected(event:Event):void 

{ 

mConnection.removeEventListener(Event.CONNECT,onConnected); 

 

dispatchEvent(event); 

} 

} 

 

publicfunctiondisconnect():void 

{ 

mConnection.disconnect(); 

} 

 

publicfunctionselect(sql:String,completeHandler:Function,errorHandler:Function=null):void 

{ 

varst:Statement=mConnection.createStatement(); 

vartoken:MySqlToken=st.executeQuery(sql); 

varresponder:AsyncResponder=newAsyncResponder(resultHandler,faultHandler,token); 

token.addResponder(responder); 

 

functionresultHandler(result:Object/*ResultSet*/,token:Object/*MySqlToken*/):void 

{ 

vardata:Array=[]; 

 

if(resultisResultSet) 

{ 

varfieldList:Array=result.getColumns(); 

while(result.next()) 

{ 

varitem:Object={}; 

foreach(varfield:FieldinfieldList) 

{ 

item[field.getName()]=result.getString(field.getName()); 

} 

data.push(item); 

} 

} 

 

completeHandler(data); 

} 

 

functionfaultHandler(info:Object,token:Object):void 

{ 

if(errorHandler==null)return; 

 

errorHandler(); 

} 

} 

 

publicfunctioninsert(sql:String,completeHandler:Function,errorHandler:Function=null):void 

{ 

varst:Statement=mConnection.createStatement(); 

vartoken:MySqlToken=st.executeQuery(sql); 

varresponder:AsyncResponder=newAsyncResponder(resultHandler,faultHandler,token); 

token.addResponder(responder); 

 

functionresultHandler(result:Object/*MySqlResponse*/,token:Object/*MySqlToken*/):void 

{ 

completeHandler(result.insertID); 

} 

 

functionfaultHandler(info:Object,token:Object):void 

{ 

if(errorHandler==null)return; 

 

errorHandler(); 

} 

} 

 

publicfunctionremove(sql:String,completeHandler:Function,errorHandler:Function=null):void 

{ 

varst:Statement=mConnection.createStatement(); 

vartoken:MySqlToken=st.executeQuery(sql); 

varresponder:AsyncResponder=newAsyncResponder(resultHandler,faultHandler,token); 

token.addResponder(responder); 

 

functionresultHandler(result:Object/*MySqlResponse*/,token:Object/*MySqlToken*/):void 

{ 

completeHandler(); 

} 

 

functionfaultHandler(info:Object,token:Object):void 

{ 

if(errorHandler==null)return; 

 

errorHandler(); 

} 

} 

} 

}

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

用法很简单,先连接:

vardatabaseData:DataBaseData=newDataBaseData(); 

databaseData.host="127.0.0.1"; 

databaseData.database="game"; 

databaseData.password="123456"; 

databaseData.port=3306; 

databaseData.username="root"; 

 

vardataBase:DataBase=newDataBase(databaseData); 

dataBase.addEventListener(Event.CONNECT,onConnected); 

dataBase.connect(); 

 

functiononConnected(event:Event):void 

{ 

dataBase.removeEventListener(Event.CONNECT,onConnected); 

 

dispatchEvent(newEvent(Event.COMPLETE)); 

}

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

dataBase.disconnect(); 

下面是select语句:

varsql:String="selectid,namefrom`npc`"; 

dataBase.select(sql,endQuery); 

 

functionendQuery(data:Array):void 

{ 

varnpcList:Array=[]; 

foreach(varitem:Objectindata) 

{ 

varnpc:Object={id:item.id,name:item.name}; 

 

npcList.push(npc); 

} 

}

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

  •  标签:  
  • MySQL
  •  

原文链接:https://77isp.com/post/4264.html

=========================================

https://77isp.com/ 为 “云服务器技术网” 唯一官方服务平台,请勿相信其他任何渠道。