配色: 字号:
flex_连接数据库
2012-08-18 | 阅:  转:  |  分享 
  
首先,做一点说明。Flex是不能直接连接数据库的,这一点大家需要知道,它只能间接地连

接数据库。Flex中提供了三种方式:HttpService,WebService和RemoteObject。其中

HttpService可以直接获取XML中的数据,还可以通过JSP,ASP以及PHP读取数据库中的

数据,这个比较简单,而且网上也有很多例子,我就不多说了。WebService我不懂,请自

己查资料。我一直用的是JAVA对象连接数据库,感觉这个挺方便,而且J2EE的技术已经

很成熟。今天的教程就是以Flex+JAVA+SQLServer获取数据库公告信息为例简单说一下

RemoteObject的用法。

前提

1.确保你安装了FlexDataService。这个对于单个CUP无限APP是免费的,可以去Adobe下

载。如果只是读取XML文件是不需要这个的,连接数据库就需要它了。

2.安装了FlexBuilder或者有FlexSDK。我这里使用的是FlexBuilder(IDE就是方便啊^_

^)。

3.安装了SQLServer数据库。

4.安装了JRUN或者tomcat或其它的J2EE容器,因为发的我的程要

J2EE上。

5.安装了JDK。

一:数据库

这里我有一个公告,为Bulletin。如下:

说明

ID自自

titleNvarchar(100)

datedatatime

authorNvarchar(20)者

contentntext容

数据库中这个。保?¢£?下一。

¥:JAVA中?获取公告的§currency1

首先,我要一个公告''“?保获取的公告信息,§currency1如下。

NoticeInfo.java

packagenet.zhuoqun.connectDB;

importjava.util.Date;

publicclassNoticeInfo{

privateStringtitle;//?

privateStringauthor;//者

privateStringcontent;//容

privateDatedates;//间

publicStringgetAuthor(){

returnauthor;

}

publicvoidsetAuthor(Stringauthor){

this.author=author;

}

………………//其它get和set方法。

}

?这个?¢我要一个数据查fi:DataServiceImpl.java''查fi数据库,fl查

fi果–?要的Flex程。?于我不·有多????,”以就?…一下JAVA

中的ArrayList这个,它‰于java.util中。先一个ArrayList:

ArrayListnoticeList=newArrayList();

查fi数据库?¢,?读取一???就`′noticeList。

while(rs.next()){

NoticeInfotemp=newNoticeInfo();

temp.setAuthor(rs.getString("author"));

temp.setContent(rs.getString("content"));

temp.setDates(rs.getDate("date"));

temp.setTitle(rs.getString("title"));

noticeList.add(temp);

}

查fi???¢你就可以ˉ这个noticeList–?去,你也可以–?去一个NoticeInfo数˙:

NoticeInfo[]notices=newNoticeInfo[noticeList.size()];

for(inti=0;i
notices=(NoticeInfo)noticeList.get(i);

}

returnnotices;

我这里用的是¢一种方法。如果你直接ˉnoticeList–?去的¨,?一点,JAVA的

ArrayList的对象′了Flex中??成ArrayCollection的。

JAVA??的§currency1就??了。

DataServiceImpl.java的ˇ?§currency1如下:

packagenet.zhuoqun.connectDB;

importjava.sql.;

importjava.util.ArrayList;

importjava.util.Date;

publicclassDataServiceImpl{

privateConnectionconn=null;

privateStatementstmt=null;

//以下是数据库以及—信息

publicfinalstaticStringDRIVER="com.microsoft.jdbc.sqlserver.SQLServerDriver";

publicfinalstaticStringCONN_STR_PRE="jdbc:microsoft:sqlserver://";

publicfinalstaticStringHOST_NAME="localhost:1433;";

publicfinalstaticStringDATABASE_NAME="DatabaseName=mydata";

publicfinalstaticStringUSERNAME="aaa";

publicfinalstaticStringPASSWORD="aaa";

publicDataServiceImpl(){



}

//查fi数据库

privateResultSetexecuteQuery(StringsqlText){

try{

Class.forName(DRIVER);

}catch(ClassNotFoundExceptione){

e.printStackTrace();

}

try{

conn=DriverManager.getConnection(CONN_STR_PRE+HOST_NAME+

DATABASE_NAME,USERNAME,PASSWORD);

stmt=conn.createStatement();

ResultSetrs=stmt.executeQuery(sqlText);

returnrs;

}catch(SQLExceptione){

e.printStackTrace();

}

returnnull;

}

//查fi公告.这个是程的§currency1

publicNoticeInfo[]getNotices(){

ArrayListnoticeList=newArrayList();

StringsqlText="selectauthor,content,date,titlefromBulletin";

ResultSetrs=executeQuery(sqlText);

try{

while(rs.next()){

NoticeInfotemp=newNoticeInfo();

temp.setAuthor(rs.getString("author"));

temp.setContent(rs.getString("content"));

temp.setDates(rs.getDate("date"));

temp.setTitle(rs.getString("title"));

noticeList.add(temp);

}

NoticeInfo[]notices=newNoticeInfo[noticeList.size()];

for(inti=0;i
notices=(NoticeInfo)noticeList.get(i);

}

returnnotices;

}catch(SQLExceptione){

e.printStackTrace();

returnnull;

}

}

}

三:FlexDataService

1,ˉ?的JAVA文件。FDS的安装文件,的文件

′\jrun4\servers\default\flex\WEB-INF\classes文件中,£下的。

2.FDS的安装文件。£?jrun4\servers\default\flex\WEB-INF\flex?。里是于

FlexDataService的文件,我这里只RemoteObject如,其它信息请自己

?…。我里的remoting-config.xml文件。里`如下信息,为

的子?a:

程§currency1





net.zhuoqun.connectDB.DataServiceImpl





你了destination的,你就用了了可以用''连接??的信息通道

(messagingchannel)。它的id?o文件中是一无¥的。source是你的JAVA

classes文件中的?。?于我的DataServiceImplclasses\net\zhuoqun\connectDB

中,”以source的为net.zhuoqun.connectDB.DataServiceImpl。?,不要?.class¢。

?a还可以有一个子?a,其用我这里就不说了,大家自己?

文(于FDS的其?有很多,这??…文里?有,我这里不多说了,

也说不过'',自己?)。

我已经?了¢的FDS,做?了?个程的大??,接下''就是前Flex

程用的了。

四:Flex程

FlexBuilder,新一个程ConnectDB。菜单栏中File->New->FlexProject,这?

弹出一个对¨框,选择FlexDataService,了一个Flex程。

五:通过RemoteObject访问数据库

程中生成的主文件ConnectDB.mxml,声明一个RemoteObject:

程§currency1


destination="dataService"result="proccessResult(event.result)"fault="Alert.show(event.fault.fault

String,''Error'')"/>

其中destination的是我FDS的的destination。result示这个

RemoteObject成功返??¢”要做的,这里我用一个方法proccessResult()''处理

返?的数据,它的参数event.result就是从服务器获得的数据,数据是为一个对象–过

''的。fault示这个RemoteObject请求失败要做的处理,这里我?弹出一个显示错

误信息的对¨框。接下''我要声明一个DataGrid控件''显示公告的?和发:

程§currency1








labelFunction="formatDate"/>





其中headerText是显示上方的头,dataField示要显示的数据域,为什么数据域是

title和dates呢?因为我–?的是一个NoticeInfo对象数˙,虽然它是为一个对象–?

''的,但是其中的数据fl没有?,那?数据域的也没有?,”以我可以根据

NoticeInfo中的?量dataField。labelFunction是用''格式化显示的,因为–?''的

是格林威治间,”以我需要其格式化然¢显示出''。注意,这里只是显示两个数据

域,fl不§其它的数据?没有了,它仍然,只是没有显示出''。

接下'',?a中?proccessResult()方法和格式化的formatDate方法:

程§currency1

privatefunctionproccessResult(result:Object):void

{

myDG.dataProvider=ArrayUtil.toArray(result);

}

privatefunctionformatDate(item:Object,column:DataGridColumn):String

{

returndf.format(item.dates);

}//df是一个DateFormatter,下??出。于如格式化DataGrid的显示

//以及DateFormatter这里就不讨论了,?…里?得很·

这个函数只是简单地获得的数据–?myDG的dataProvider。result的是Object,因

为数据是为一个对象–过''的。?”以用ArrayUtil.toArray()这个方法,是因为返?的

??可能只有一?,而myDG的dataProvider显示单个对象的可能?出错,”以安ˇ

起见先其转换成数˙。

最¢,我?用RemoteObject的方法,使其程启就用。

程§currency1

privatefunctioninitApp():void

{

getData.getNotices();

}

其中getData是RemoteObject的id,getNotices()是DataServiceImpl.java中的方法。这里

可以直接用它。然,如果DataServiceImpl.java有其它方法,也可以通过这种方式直接

用。接下''˙件??用initApp()方法,中`一个

creationComplete:

程§currency1


creationComplete="initApp()">

ConnectDB.mxml的ˇ?§currency1:

程§currency1




creationComplete="initApp()">




importmx.controls.Alert;

importmx.utils.ArrayUtil;

privatefunctioninitApp():void

{

getData.getNotices();

}

privatefunctionproccessResult(result:Object):void

{

myDG.dataProvider=ArrayUtil.toArray(result);

}

privatefunctionformatDate(item:Object,column:DataGridColumn):String

{

returndf.format(item.dates);

}//df是一个DateFormatter,下??出。于如格式化DataGrid的显示

//以及DateFormatter这里就不讨论了,?…里?得很·

]]>






destination="dataService"result="proccessResult(event.result)"fault="Alert.show(event.fault.fault

String,''Error'')"/>








labelFunction="formatDate"/>







?个程终于?成,启JRUN,然¢程,查程果

如果是其他数据库,只需要改一下数据库—信息就可以了

献花(0)
+1
(本文系顾于思收藏...首藏)