连接Flex数据库三种方法

开发 后端
连接Flex数据库三种方法你是否了解,Flex是不能直接连接数据库的,这一点大家需要知道,它只能间接地连接数据库。

本文和大家重点讨论一下连接Flex数据库三种方法,Flex中提供了三种方式:HttpService,WebService和RemoteObject。其中HttpService可以直接获取XML中的数据,还可以通过JSP,ASP以及PHP读取Flex数据库中的数据,这个比较简单。

Flex连接Flex数据库三种方法

首先,做一点说明。Flex是不能直接连接Flex数据库的,这一点大家需要知道,它只能间接地连接Flex数据库。Flex中提供了三种方式:HttpService,WebService和RemoteObject。其中HttpService可以直接获取XML中的数据,还可以通过JSP,ASP以及PHP读取Flex数据库中的数据,这个比较简单,而且网上也有很多例子,我就不多说了。WebService我不懂,请自己查资料。我一直用的是JAVA对象连接Flex数据库,感觉这个挺方便,而且J2EE的技术已经很成熟。今天的教程就是以Flex+JAVA+SQLServer获取Flex数据库公告信息为例简单说一下RemoteObject的用法。

前提

1.确保你安装了FlexDataService。这个对于单个CUP无限APP是免费的,可以去Adobe下载。如果只是读取XML文件是不需要这个的,连接FlexFlex数据库就需要它了。
2.安装了FlexBuilder或者有FlexSDK。我这里使用的是FlexBuilder(IDE就是方便啊^_^)。
3.安装了SQLServerFlex数据库。
4.安装了JRUN或者tomcat或其它的J2EE容器,因为发布的时候我们的程序要运行在J2EE平台上。
5.安装了JDK。

***步:创建Flex数据库

这里我们有一个公告表,表名为Bulletin。结构如下:
◆字段名称字段类型说明
◆ID自动编号自动编号
◆titleNvarchar(100)题目
◆datedatatime日期
◆authorNvarchar(20)作者
◆contentntext内容
在Flex数据库中创建这个表。保存之后进入下一步。#p#

第二步:在JAVA中编写获取公告的代码

首先,我们要创建一个公告类来专门保存获取的公告信息,代码如下。
 

  1. NoticeInfo.java  
  2. packagenet.zhuoqun.connectDB;  
  3. importjava.util.Date;  
  4. publicclassNoticeInfo{  
  5. privateStringtitle;//标题  
  6. privateStringauthor;//作者  
  7. privateStringcontent;//内容  
  8. privateDatedates;//时间  
  9. publicStringgetAuthor(){  
  10. returnauthor;  
  11. }  
  12. publicvoidsetAuthor(Stringauthor){  
  13. this.author=author;  
  14. }  
  15. ………………//其它get和set方法。  
  16. }  

创建好这个之后我们要创建一个数据查询类:DataServiceImpl.java来查询Flex数据库,并将查询结果传给将要创建的Flex程序。由于我们不清楚有多少条记录,所以就借助一下JAVA中的ArrayList这个类,它位于java.util包中。先创建一个ArrayList:
 

  1. ArrayListnoticeList=newArrayList(); 

查询Flex数据库之后,每读取一条记录就添加到noticeList。
 

  1. while(rs.next()){  
  2. NoticeInfotemp=newNoticeInfo();  
  3. temp.setAuthor(rs.getString("author"));  
  4. temp.setContent(rs.getString("content"));  
  5. temp.setDates(rs.getDate("date"));  
  6. temp.setTitle(rs.getString("title"));  
  7. noticeList.add(temp);  

查询完毕之后你就可以把这个noticeList传回去,你也可以传回去一个NoticeInfo数组:
 

  1. NoticeInfo[]notices=newNoticeInfo[noticeList.size()];  
  2. for(inti=0;i<noticeList.size();i++){  
  3. notices=(NoticeInfo)noticeList.get(i);  
  4. }  
  5. returnnotices; 

我这里用的是后一种方法。如果你直接把noticeList传回去的话,记住一点,JAVA的ArrayList类型的对象到了Flex中会变成ArrayCollection类型的。
现在JAVA部分的代码就写好了。
DataServiceImpl.java的全部代码如下:
 

  1. packagenet.zhuoqun.connectDB;  
  2. importjava.sql.*;  
  3. importjava.util.ArrayList;  
  4. importjava.util.Date;  
  5. publicclassDataServiceImpl{  
  6. privateConnectionconn=null;  
  7. privateStatementstmt=null;  
  8. //以下是Flex数据库以及驱动信息  
  9. publicfinalstaticStringDRIVER="com.microsoft.jdbc.sqlserver.SQLServerDriver";  
  10. publicfinalstaticStringCONN_STR_PRE="jdbc:microsoft:sqlserver://";  
  11. publicfinalstaticStringHOST_NAME="localhost:1433;";  
  12. publicfinalstaticStringDATABASE_NAME="DatabaseName=mydata";  
  13. publicfinalstaticStringUSERNAME="aaa";  
  14. publicfinalstaticStringPASSWORD="aaa";  
  15. publicDataServiceImpl(){  
  16.  
  17. }  
  18. //查询Flex数据库  
  19. privateResultSetexecuteQuery(StringsqlText){  
  20. try{  
  21. Class.forName(DRIVER);  
  22. }catch(ClassNotFoundExceptione){  
  23. e.printStackTrace();  
  24. }  
  25. try{  
  26. conn=DriverManager.getConnection(CONN_STR_PRE+HOST_NAME+DATABASE_NAME,USERNAME,PASSWORD);  
  27. stmt=conn.createStatement();  
  28. ResultSetrs=stmt.executeQuery(sqlText);  
  29. returnrs;  
  30. }catch(SQLExceptione){  
  31. e.printStackTrace();  
  32. }  
  33. returnnull;  
  34. }  
  35. //查询公告.这个是本程序的关键代码  
  36. publicNoticeInfo[]getNotices(){  
  37. ArrayListnoticeList=newArrayList();  
  38. StringsqlText="selectauthor,content,date,titlefromBulletin";  
  39. ResultSetrs=executeQuery(sqlText);  
  40. try{  
  41. while(rs.next()){  
  42. NoticeInfotemp=newNoticeInfo();  
  43. temp.setAuthor(rs.getString("author"));  
  44. temp.setContent(rs.getString("content"));  
  45. temp.setDates(rs.getDate("date"));  
  46. temp.setTitle(rs.getString("title"));  
  47. noticeList.add(temp);  
  48. }  
  49. NoticeInfo[]notices=newNoticeInfo[noticeList.size()];  
  50. for(inti=0;i<noticeList.size();i++){  
  51. notices=(NoticeInfo)noticeList.get(i);  
  52. }  
  53. returnnotices;  
  54. }catch(SQLExceptione){  
  55. e.printStackTrace();  
  56. returnnull;  
  57. }  
  58. }  
  59. }  

#p#第三步:配置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文件。向里面添加如下信息,作为<service>的子标签:
程序代码
 

  1. <destinationiddestinationid="dataService"> 
  2. <properties> 
  3. <source>net.zhuoqun.connectDB.DataServiceImpl</source> 
  4. </properties> 
  5. </destination> 


当你设定了destination的时候,你就引用了了可以用来连接相应类的信息通道(messagingchannel)。它的id必须在文件中是***的。source属性是指你编译的JAVA类在classes文件夹中的路径。由于我的DataServiceImpl类在classes\net\zhuoqun\connectDB中,所以source的值为net.zhuoqun.connectDB.DataServiceImpl。记住,不要写.class后缀。<properties>标签还可以有一个<scope>子标签,其作用我在这里就不说了,大家自己看相关文档(关于FDS的配置其实有很多东西,这些在帮助文档里都有,我这里不多说了,也说不过来,自己看吧)。
现在我们已经配置好了后台的FDS,做完了整个程序的大部分工作,接下来就是前台Flex程序调用的事情了。

第四步:创建Flex程序

打开FlexBuilder,新建一个工程ConnectDB。菜单栏中File->New->FlexProject,这时会弹出一个对话框,选择FlexDataService,创建了一个Flex工程。
 

第五步:通过RemoteObject访问Flex数据库

打开工程中生成的主文件ConnectDB.mxml,声明一个RemoteObject:
程序代码
 

  1. <mx:RemoteObjectidmx:RemoteObjectid="getData"destination="dataService"result="proccessResult(event.result)  
  2. "fault="Alert.show(event.fault.faultString,'Error')"/> 

 

其中destination的值是刚才我们在配置FDS的时候设定的destination。result表示在这个RemoteObject成功返回之后所要做的动作,这里我们调用一个方法proccessResult()来处理返回的数据,它的参数event.result就是从服务器段获得的数据,数据是作为一个对象传过来的。fault表示在这个RemoteObject请求失败时要做的处理,这里我们会弹出一个显示错误信息的对话框。接

◆下来我们要声明一个DataGrid控件来显示公告的标题和发布日期:
程序代码
 

  1. <mxataGrididmxataGridid="myDG"> 
  2. <mx:columns> 
  3. <mxataGridColumnheaderTextmxataGridColumnheaderText="标题"dataField="title"/> 
  4. <mxataGridColumnheaderTextmxataGridColumnheaderText="发布日期"dataField="dates"labelFunction="formatDate"/> 
  5. </mx:columns> 
  6. </mx:DataGrid> 

其中headerText是显示在上方的表头,dataField表示要显示的数据域,为什么数据域是title和dates呢?因为我们传回的是一个NoticeInfo对象数组,虽然它是作为一个对象传回来的,但是其中的数据结构并没有变,那些数据域的名字也没有变,所以我们可以根据NoticeInfo中的变量设定dataField。labelFunction属性是用来格式化显示的,因为传回来的是格林威治时间,所以我们需要将其格式化然后显示出来。注意,这里只是显示两个数据域,并不代表其它的数据都没有了,它们仍然存在,只是没有显示出来。#p#

◆接下来,在<mx:Script>标签中编写proccessResult()方法和格式化日期的formatDate方法:
程序代码
 

  1. privatefunctionproccessResult(result:Object):void  
  2. {  
  3. myDG.dataProvider=ArrayUtil.toArray(result);  
  4. }  
  5. privatefunctionformatDate(item:Object,column:DataGridColumn):String  
  6. {  
  7. returndf.format(item.dates);  
  8. }// 

df是一个DateFormatter,在下面会给出。关于如何格式化DataGrid的显示
//以及DateFormatter这里就不讨论了,帮助里写得很清楚
这个函数只是简单地将获得的数据传给myDG的dataProvider。result的类型是Object,因为数据是作为一个对象传过来的。之所以调用ArrayUtil.toArray()这个方法,是因为返回的记录可能只有一条,而myDG的dataProvider显示单个对象的时候可能会出错,所以安全起见先将其转换成数组。

◆***,我们编写调用RemoteObject的方法,使其在程序启动时就调用。

程序代码
 

  1. privatefunctioninitApp():void  
  2. {  
  3. getData.getNotices();  

其中getData是RemoteObject的id,getNotices()是DataServiceImpl.java中的方法。在这里可以直接调用它。当然,如果DataServiceImpl.java有其它方法,也可以通过这种方式直接调用。接下来设定组件创建完毕时调用initApp()方法,在<mx:Application>中添加一个creationComplete属性:
程序代码
 

  1. <mx:Applicationxmlns:mxmx:Applicationxmlns:mx="http://www.adobe.com/2006/mxml"fontSize="12"creationComplete="initApp()"> 

ConnectDB.mxml的全部代码:
程序代码
 

  1. <?xmlversionxmlversion="1.0"encoding="utf-8"?> 
  2. <mx:Applicationxmlns:mxmx:Applicationxmlns:mx="http://www.adobe.com/2006/mxml"fontSize="12"creationComplete="initApp()"> 
  3. <mx:Script> 
  4. <![CDATA[  
  5. importmx.controls.Alert;  
  6. importmx.utils.ArrayUtil;  
  7. privatefunctioninitApp():void  
  8. {  
  9. getData.getNotices();  
  10. }  
  11. privatefunctionproccessResult(result:Object):void  
  12. {  
  13. myDG.dataProvider=ArrayUtil.toArray(result);  
  14. }  
  15. privatefunctionformatDate(item:Object,column:DataGridColumn):String  
  16. {  
  17. returndf.format(item.dates);  
  18. }//df是一个DateFormatter,在下面会给出。关于如何格式化DataGrid的显示  
  19. //以及DateFormatter这里就不讨论了,帮助里写得很清楚  
  20. ]]> 
  21. </mx:Script> 
  22. <mx:DateFormatteridmx:DateFormatterid="df"formatString="YYYY-MM-DD"/> 
  23. <mx:RemoteObjectidmx:RemoteObjectid="getData"destination="dataService"result="proccessResult(event.result)
  24. "fault="Alert.show(event.fault.faultString,'Error')"/> 
  25. <mx:DataGrididmx:DataGridid="myDG"> 
  26. <mx:columns> 
  27. <mx:DataGridColumnheaderTextmx:DataGridColumnheaderText="标题"dataField="title"/> 
  28. <mx:DataGridColumnheaderTextmx:DataGridColumnheaderText="发布日期"dataField="dates"labelFunction="formatDate"/> 
  29. </mx:columns> 
  30. </mx:DataGrid> 
  31. </mx:Application> 

整个工程终于完成,启动JRUN,然后运行程序,查看程序结果,如果是其他Flex数据库,只需要改一下Flex数据库驱动信息就可以了。


 

【编辑推荐】

  1. Flex客户端工程路径规划指导
  2. Flex开发者必须知道的10件事
  3. 技术前沿 看Flex客户端缓存技术如何使用
  4. 12个Flex常用功能代码再现
  5. 学习笔记 Flex国际化如何支持其他语言

 

 

责任编辑:佚名 来源: csdn.net
相关推荐

2009-07-22 11:33:14

JDBC连接Sybas

2010-07-30 10:30:58

Flex数据绑定

2010-11-19 14:51:09

Oracle数据库关闭

2010-09-13 15:41:23

sql server数

2009-10-28 18:00:34

Visual C#数据

2010-08-04 10:42:08

Flex数据库

2010-08-04 10:32:56

Flex连接数据库

2009-07-23 15:17:54

JDBC连接Acces

2010-08-13 15:08:55

Flex数据访问

2011-05-26 13:16:37

Oracle数据库备份

2010-11-09 13:37:26

SQLSERVER查询

2009-06-23 10:45:18

Hibernate支持

2011-06-10 10:43:12

Ubuntu应用安装

2013-01-04 15:47:54

Android开发平铺UI设计

2021-10-09 06:59:36

技术MyBatis数据

2010-10-20 13:52:07

SQL Server数

2023-05-16 16:07:07

大数据数据管理工具

2011-03-30 14:52:34

备份WordPress博客

2015-12-11 09:24:38

加密数据Linux

2009-07-08 12:56:32

编写Servlet
点赞
收藏

51CTO技术栈公众号