如何將AS3連接到MySQL數(shù)據(jù)庫(kù)上
最近由于制作任務(wù)編輯器,需要連接到數(shù)據(jù)庫(kù)中進(jìn)行一些任務(wù)數(shù)據(jù)的操作,而我們存放任務(wù)數(shù)據(jù)的數(shù)據(jù)庫(kù)中MYSQL,所以就找了一下AS3接連MYSQL數(shù)據(jù)庫(kù)的資料。
擴(kuò)張閱讀:
ActionScript簡(jiǎn)稱“AS”——動(dòng)作腳本,是遵循 ECMAscript第四版 的 Adobe Flash Player 運(yùn)行時(shí)環(huán)境的編程語言。它在 Flash 內(nèi)容和應(yīng)用程序中實(shí)現(xiàn)交互性、數(shù)據(jù)處理以及其他功能。 ActionScript是Flash的腳本語言,與JavaScript相似,ActionScript是一種編程語言,新出的AS3.0使用OOP(面對(duì)對(duì)象編程),增加更強(qiáng)的報(bào)錯(cuò)能力,指定類型也更明確。
找到一個(gè)好東西:ActionScript 3 MySql Driver,用SVN的童鞋可以直接checkout:
http://assql.googlecode.com/svn/trunk/為了使用簡(jiǎn)單,我做了一個(gè)簡(jiǎn)單的包裝類(包含一個(gè)數(shù)據(jù)結(jié)構(gòu)):
- 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個(gè)方法,select,insert,remove,分別對(duì)應(yīng)了SQL語句中的select,insert,delete
用法很簡(jiǎn)單,先連接:
- 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語句用法會(huì)返回一個(gè)insertID,也就是插入的那條數(shù)據(jù)的ID。
原文鏈接:http://www.cnblogs.com/yili16438/archive/2011/04/23/2025936.html
【編輯推薦】















 
 
 







 
 
 
 