http://mudchobo.tomeii.com/tt/318
새로운 버전에서 방식이 바뀌었습니다.
여기위에것을 보고 하세요 ^^
우연히 지돌스타님 블로그를 구독하다가 좋은 정보가 있어서 보고 있었습니다.
Flex에서 db와 연동하는 좋은 드라이버가 있다는 정보입니다.
http://blog.jidolstar.com/312
그래서 제가 삽질해봤습니다-_-;
보통 DB랑 연동하려면 JAVA, PHP, ASP 등 다른 언어와 연동이 필요합니다.
근데 이 asSQL이라는 것을 이용하면 그냥 Flex단에서 DB와 연결해줍니다.
우선 asSQL을 받아봅시다.
http://code.google.com/p/assql/
여기서 오른쪽에 보면 2.0.1버전용과 3.0.0버전용이 있습니다.
저는 Flex3으로 할 것이기에 3.0.0을 받아보도록 하겠습니다. assql_Beta2_Flex3.0.0.swc
DB에는 이런 테이블과 이런 데이터가 있다고 합시다.
[code]
CREATE TABLE `products` (
`id` int(11) NOT NULL,
`description` varchar(255) default NULL,
`price` decimal(15,2) default NULL,
PRIMARY KEY (`id`),
KEY `products_description` (`description`)
) ENGINE=MyISAM DEFAULT CHARSET=euckr;
INSERT INTO `products` (`id`, `description`, `price`) VALUES
(1, 'Lamp', 469.80),
(2, 'Table', 3502.62),
(3, 'Chair', 1061.12);
[/code]
그럼 플렉스 빌더를 실행합니다.
File -> New -> Flex Project 선택합니다. Project name은 FlexMysqlTest 라고 합시다.
Web application선택하고, Application server type은 None으로 하고 Finish 선택!
libs폴더가 있는데요. 아까 받은 assql_Beta2_Flex3.0.0.swc 파일을 libs폴더에 복사합니다.
[code]
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"
creationComplete="init();" width="400" height="400">
<mx:Script>
<![CDATA[
import mx.controls.Alert;
import com.maclema.mysql.events.MySqlErrorEvent;
import com.maclema.mysql.events.MySqlEvent;
import mx.collections.ArrayCollection;
import com.maclema.mysql.ResultSet;
import com.maclema.mysql.Statement;
import com.maclema.mysql.Connection;
[Bindable]
private var ac:ArrayCollection;
private var con:Connection;
private var st:Statement;
private function init():void {
con = new Connection("DB주소", 3306,
"DB아이디", "DB비밀번호", "DB이름");
con.addEventListener(Event.CONNECT, onConnect);
con.addEventListener(MySqlErrorEvent.SQL_ERROR, onError);
con.connect();
}
private function onConnect(e:Event):void {
st = con.createStatement();
st.addEventListener(MySqlEvent.RESULT, onResult);
st.addEventListener(MySqlEvent.RESPONSE, onResponse);
st.addEventListener(MySqlErrorEvent.SQL_ERROR, onError);
st.executeQuery("SELECT id, description, price FROM products");
}
private function onResult(event:MySqlEvent):void {
//FOR SELECT
var resultset:ResultSet = event.resultSet;
ac = resultset.getRows();
}
private function onResponse(event:MySqlEvent):void {
//FOR INSERT, UPDATE, etc.
}
private function onError(event:MySqlErrorEvent):void {
Alert.show(event.text);
}
]]>
</mx:Script>
<mx:DataGrid id="dg" width="100%" height="100%" dataProvider="{ac}"/>
</mx:Application>
[/code]
소켓을 이용해서 하는거라 connect를 호출하고 연결한 뒤 소켓으로 막 보내는 것 같아요.
어쨌든 저렇게 하면 되네요. 참 쉽죠?(밥로스 버전-_-)
INSERT, UPDATE 와 SELECT는 이벤트가 서로 틀립니다.
INSERT,UPDATE는 RESPONSE고, SELECT는 RESULT네요 ^^