早在几个星期前 maclema 就在他的 Blog 公布了一个MySql for AS3的驱动程序,这就意味着通过Flash/Flex可以直接连接MySql数据库了.一直没有时间测试使用,今天测试了一下,不错.
它的原理是通过Socket来实现的,与MySql建立Tcp连接,根据协议发送相关指令来现实数据通信.如果要放在Web服务器上访问MySql,当然要放入crossdomain.xml确定才行.不过在本地或者使用Apollo就不需要了.下面写了个简单的例子.
Code:
import mx.collections.ArrayCollection;
import mx.controls.Alert;
import com.maclema.mysql.events.ResultsEvent;
import com.maclema.mysql.ResultSet;
import mx.rpc.events.ResultEvent;
import com.maclema.mysql.Statement;
import com.maclema.mysql.events.SQLErrorEvent;
import com.maclema.mysql.Connection;
import com.maclema.mysql.crypto.PlainTextScrambler;
private var mySqlconnection: Connection;
[Bindable]
private var userList: ArrayCollection;
private function connection(): void
{
var scrambler: PlainTextScrambler = new PlainTextScrambler("123456");
mySqlconnection = new Connection("127.0.0.1", 3306, "root", scrambler, "test");
mySqlconnection.addEventListener(Event.CONNECT, onConnectionHandle);
mySqlconnection.addEventListener(SQLErrorEvent.SQL_ERROR, onErrorHandle);
mySqlconnection.connect();
}
private function onConnectionHandle(event: Event): void
{
var st: Statement = mySqlconnection.createStatement();
//监听查询返回事件
st.addEventListener(ResultsEvent.RESULTS, onResultHandle);
st.executeQuery("select * from test;");
}
private function onResultHandle(event: ResultsEvent): void
{
var st: Statement = Statement(event.target);
var resultSet: ResultSet = event.resultSet;
while (resultSet.next()){
//返回数据的列表
userList = resultSet.getRows();
}
mySqlconnection.disconnect();
}
private function onErrorHandle(event: SQLErrorEvent): void
{
var st: Statement = Statement(event.target);
Alert.show("error message: /n" + event.text); mySqlconnection.disconnect();
}
详细请见: http://maclema.com/assql/
现已又有更新。。