成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Flex數(shù)據(jù)庫連接的方法集錦

開發(fā) 后端
本文向大家介紹一下Flex連接數(shù)據(jù)庫三種方法,F(xiàn)lex是不能直接連接數(shù)據(jù)庫的,這一點(diǎn)大家需要知道,它只能間接地連接數(shù)據(jù)庫。

本文和大家重點(diǎn)討論一下連接Flex數(shù)據(jù)庫三種方法,F(xiàn)lex是不能直接連接數(shù)據(jù)庫的,這一點(diǎn)大家需要知道,它只能間接地連接數(shù)據(jù)庫。Flex中提供了三種方式:HttpService,WebService和RemoteObject。

連接Flex數(shù)據(jù)庫三種方法

首先,做一點(diǎn)說明。Flex是不能直接連接數(shù)據(jù)庫的,這一點(diǎn)大家需要知道,它只能間接地進(jìn)行連接Flex數(shù)據(jù)庫。Flex中提供了三種方式:HttpService,WebService和RemoteObject。其中HttpService可以直接獲取XML中的數(shù)據(jù),還可以通過JSP,ASP以及PHP讀取數(shù)據(jù)庫中的數(shù)據(jù),這個(gè)比較簡單,而且網(wǎng)上也有很多例子,我就不多說了。WebService我不懂,請(qǐng)自己查資料。我一直用的是JAVA對(duì)象連接數(shù)據(jù)庫,感覺這個(gè)挺方便,而且J2EE的技術(shù)已經(jīng)很成熟。今天的教程就是以Flex+JAVA+SQLServer獲取數(shù)據(jù)庫公告信息為例簡單說一下RemoteObject的用法。

前提

1.確保你安裝了FlexDataService。這個(gè)對(duì)于單個(gè)CUP無限APP是免費(fèi)的,可以去Adobe下載。如果只是讀取XML文件是不需要這個(gè)的,連接數(shù)據(jù)庫就需要它了。
2.安裝了FlexBuilder或者有FlexSDK。我這里使用的是FlexBuilder(IDE就是方便啊^_^)。
3.安裝了SQLServer數(shù)據(jù)庫。
4.安裝了JRUN或者tomcat或其它的J2EE容器,因?yàn)榘l(fā)布的時(shí)候我們的程序要運(yùn)行在J2EE平臺(tái)上。
5.安裝了JDK。

第一步:創(chuàng)建Flex數(shù)據(jù)庫

這里我們有一個(gè)公告表,表名為Bulletin。結(jié)構(gòu)如下:

字段名稱字段類型說明
ID自動(dòng)編號(hào)自動(dòng)編號(hào)
titleNvarchar(100)題目
datedatatime日期
authorNvarchar(20)作者
contentntext內(nèi)容
在數(shù)據(jù)庫中創(chuàng)建這個(gè)表。保存之后進(jìn)入下一步。#p#

第二步:在JAVA中編寫獲取公告的代碼

首先,我們要?jiǎng)?chuàng)建一個(gè)公告類來專門保存獲取的公告信息,代碼如下。

  1. NoticeInfo.java  
  2. packagenet.zhuoqun.connectDB;  
  3. importjava.util.Date;  
  4. publicclassNoticeInfo{  
  5. privateStringtitle;//標(biāo)題  
  6. privateStringauthor;//作者  
  7. privateStringcontent;//內(nèi)容  
  8. privateDatedates;//時(shí)間  
  9. publicStringgetAuthor(){  
  10. returnauthor;  
  11. }  
  12. publicvoidsetAuthor(Stringauthor){  
  13. this.author=author;  
  14. }  
  15. ………………//其它get和set方法。  
  16. }  

創(chuàng)建好這個(gè)之后我們要?jiǎng)?chuàng)建一個(gè)數(shù)據(jù)查詢類:DataServiceImpl.java來查詢Flex數(shù)據(jù)庫,并將查詢結(jié)果傳給將要?jiǎng)?chuàng)建的Flex程序。由于我們不清楚有多少條記錄,所以就借助一下JAVA中的ArrayList這個(gè)類,它位于java.util包中。先創(chuàng)建一個(gè)ArrayList:
ArrayListnoticeList=newArrayList();
查詢數(shù)據(jù)庫之后,每讀取一條記錄就添加到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);  
  8. }  

查詢完畢之后你就可以把這個(gè)noticeList傳回去,你也可以傳回去一個(gè)NoticeInfo數(shù)組:
 

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


我這里用的是后一種方法。如果你直接把noticeList傳回去的話,記住一點(diǎn),JAVA的ArrayList類型的對(duì)象到了Flex中會(huì)變成ArrayCollection類型的。
現(xiàn)在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. //以下是數(shù)據(jù)庫以及驅(qū)動(dòng)信息  
  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. //查詢數(shù)據(jù)庫  
  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. //查詢公告.這個(gè)是本程序的關(guān)鍵代碼  
  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. }  
  60.  

 

#p#第三步:配置FlexDataService

1,把剛才寫的JAVA文件編譯。打開FDS的安裝文件夾,將編譯的文件拷貝到\jrun4\servers\default\flex\WEB-INF\classes文件夾中,進(jìn)行下面的配置。
2.打開FDS的安裝文件夾。進(jìn)入jrun4\servers\default\flex\WEB-INF\flex目錄。里面是關(guān)于FlexDataService的配置文件,我們這里只看RemoteObject如何配置,其它配置信息請(qǐng)自己看幫助。現(xiàn)在我們打開里面的remoting-config.xml文件。向里面添加如下信息,作為<service>的子標(biāo)簽:
程序代碼
 

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

當(dāng)你設(shè)定了destination的時(shí)候,你就引用了了可以用來連接相應(yīng)類的信息通道(messagingchannel)。它的id必須在文件中是獨(dú)一無二的。source屬性是指你編譯的JAVA類在classes文件夾中的路徑。由于我的DataServiceImpl類在classes\net\zhuoqun\connectDB中,所以source的值為net.zhuoqun.connectDB.DataServiceImpl。記住,不要寫.class后綴。<properties>標(biāo)簽還可以有一個(gè)<scope>子標(biāo)簽,其作用我在這里就不說了,大家自己看相關(guān)文檔(關(guān)于FDS的配置其實(shí)有很多東西,這些在幫助文檔里都有,我這里不多說了,也說不過來,自己看吧)。
現(xiàn)在我們已經(jīng)配置好了后臺(tái)的FDS,做完了整個(gè)程序的大部分工作,接下來就是前臺(tái)Flex程序調(diào)用的事情了。

第四步:創(chuàng)建Flex程序

打開FlexBuilder,新建一個(gè)工程ConnectDB。菜單欄中File->New->FlexProject,這時(shí)會(huì)彈出一個(gè)對(duì)話框,選擇FlexDataService,創(chuàng)建了一個(gè)Flex工程。

#p#第五步:通過RemoteObject訪問Flex數(shù)據(jù)庫

打開工程中生成的主文件ConnectDB.mxml,聲明一個(gè)RemoteObject:

程序代碼
 

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


其中destination的值是剛才我們?cè)谂渲肍DS的時(shí)候設(shè)定的destination。result表示在這個(gè)RemoteObject成功返回之后所要做的動(dòng)作,這里我們調(diào)用一個(gè)方法proccessResult()來處理返回的數(shù)據(jù),它的參數(shù)event.result就是從服務(wù)器段獲得的數(shù)據(jù),數(shù)據(jù)是作為一個(gè)對(duì)象傳過來的。fault表示在這個(gè)RemoteObject請(qǐng)求失敗時(shí)要做的處理,這里我們會(huì)彈出一個(gè)顯示錯(cuò)誤信息的對(duì)話框。

接下來我們要聲明一個(gè)DataGrid控件來顯示公告的標(biāo)題和發(fā)布日期:

程序代碼
 

  1. <mxataGrididmxataGridid="myDG"> 
  2. <mx:columns> 
  3. <mxataGridColumnheaderTextmxataGridColumnheaderText="標(biāo)題"dataField="title"/> 
  4. <mxataGridColumnheaderTextmxataGridColumnheaderText="發(fā)布日期"dataField="dates"labelFunction="formatDate"/> 
  5. </mx:columns> 
  6. </mx:DataGrid> 

其中headerText是顯示在上方的表頭,dataField表示要顯示的數(shù)據(jù)域,為什么數(shù)據(jù)域是title和dates呢?因?yàn)槲覀儌骰氐氖且粋€(gè)NoticeInfo對(duì)象數(shù)組,雖然它是作為一個(gè)對(duì)象傳回來的,但是其中的數(shù)據(jù)結(jié)構(gòu)并沒有變,那些數(shù)據(jù)域的名字也沒有變,所以我們可以根據(jù)NoticeInfo中的變量設(shè)定dataField。labelFunction屬性是用來格式化顯示的,因?yàn)閭骰貋淼氖歉窳滞螘r(shí)間,所以我們需要將其格式化然后顯示出來。注意,這里只是顯示兩個(gè)數(shù)據(jù)域,并不代表其它的數(shù)據(jù)都沒有了,它們?nèi)匀淮嬖冢皇菦]有顯示出來。

接下來,在<mx:Script>標(biāo)簽中編寫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是一個(gè)DateFormatter,在下面會(huì)給出。關(guān)于如何格式化DataGrid的顯示
//以及DateFormatter這里就不討論了,幫助里寫得很清楚
這個(gè)函數(shù)只是簡單地將獲得的數(shù)據(jù)傳給myDG的dataProvider。result的類型是Object,因?yàn)閿?shù)據(jù)是作為一個(gè)對(duì)象傳過來的。之所以調(diào)用ArrayUtil.toArray()這個(gè)方法,是因?yàn)榉祷氐挠涗浛赡苤挥幸粭l,而myDG的dataProvider顯示單個(gè)對(duì)象的時(shí)候可能會(huì)出錯(cuò),所以安全起見先將其轉(zhuǎn)換成數(shù)組。
最后,我們編寫調(diào)用RemoteObject的方法,使其在程序啟動(dòng)時(shí)就調(diào)用。

程序代碼
 

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


其中g(shù)etData是RemoteObject的id,getNotices()是DataServiceImpl.java中的方法。在這里可以直接調(diào)用它。當(dāng)然,如果DataServiceImpl.java有其它方法,也可以通過這種方式直接調(diào)用。

接下來設(shè)定組件創(chuàng)建完畢時(shí)調(diào)用initApp()方法,在<mx:Application>中添加一個(gè)creationComplete屬性:
程序代碼
 

  1. <mx:Applicationxmlns:mxmx:Applicationxmlns:mx="http://www.adobe.com/2006/mxml" 
  2.  
  3. 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" 
  3.  
  4. fontSize="12"creationComplete="initApp()"> 
  5. <mx:Script> 
  6. <![CDATA[  
  7. importmx.controls.Alert;  
  8. importmx.utils.ArrayUtil;  
  9. privatefunctioninitApp():void  
  10. {  
  11. getData.getNotices();  
  12. }  
  13. privatefunctionproccessResult(result:Object):void  
  14. {  
  15. myDG.dataProvider=ArrayUtil.toArray(result);  
  16. }  
  17. privatefunctionformatDate(item:Object,column:DataGridColumn):String  
  18. {  
  19. returndf.format(item.dates);  
  20. }//df是一個(gè)DateFormatter,在下面會(huì)給出。  
  21. 關(guān)于如何格式化DataGrid的顯示  
  22. //以及DateFormatter這里就不討論了,幫助里寫得很清楚  
  23. ]]> 
  24. </mx:Script> 
  25. <mx:DateFormatteridmx:DateFormatterid="df"formatString="YYYY-MM-DD"/> 
  26. <mx:RemoteObjectidmx:RemoteObjectid="getData"destination="dataService"  
  27. result="proccessResult(event.result)"fault="Alert.show(event.fault.faultString,'Error')"/> 
  28. <mx:DataGrididmx:DataGridid="myDG"> 
  29. <mx:columns> 
  30. <mx:DataGridColumnheaderTextmx:DataGridColumnheaderText="標(biāo)題"dataField="title"/> 
  31. <mx:DataGridColumnheaderTextmx:DataGridColumnheaderText="發(fā)布日期"dataField="dates"labelFunction="formatDate"/> 
  32. </mx:columns> 
  33. </mx:DataGrid> 
  34. </mx:Application> 


整個(gè)工程終于完成,啟動(dòng)JRUN,然后運(yùn)行程序,查看程序結(jié)果。如果是其他數(shù)據(jù)庫,只需要改一下數(shù)據(jù)庫驅(qū)動(dòng)信息就可以了

【編輯推薦】

  1. 連接Flex數(shù)據(jù)庫行之有效的辦法
  2. 連接Flex數(shù)據(jù)庫三種方法
  3. Flex及FlexBuilder2.0開發(fā)環(huán)境詳解
  4. FlexBuilder3.0與Eclipse3.4的完美結(jié)合
  5. 學(xué)習(xí)筆記 FlexBuilder2.0中如何使用基于Lists的控件 


 

責(zé)任編輯:佚名 來源: javaeye.com
相關(guān)推薦

2010-08-04 10:32:56

Flex連接數(shù)據(jù)庫

2010-07-29 09:56:45

Flex數(shù)據(jù)庫

2010-08-03 09:27:29

設(shè)置Flex樣式

2010-07-29 10:09:09

Flex數(shù)據(jù)庫

2010-08-05 14:03:32

Flex框架

2010-10-26 15:54:02

連接oracle數(shù)據(jù)庫

2009-06-10 22:11:28

javascript連

2009-08-12 14:23:01

C#連接MySql數(shù)據(jù)

2009-11-30 17:54:56

PHP連接Sql數(shù)據(jù)庫

2009-07-31 17:07:40

ASP.NET數(shù)據(jù)庫連

2011-05-26 09:27:59

JDBC連接數(shù)據(jù)庫

2010-09-08 13:53:10

.NET連接Sybas

2011-04-18 09:29:40

數(shù)據(jù)庫連接數(shù)

2010-09-13 15:55:17

SQL Server數(shù)

2009-08-18 11:23:11

2010-11-08 16:04:06

SQL SERVER連

2010-08-27 14:39:46

db2連接數(shù)據(jù)庫

2019-03-27 14:41:41

Python數(shù)據(jù)庫Windows

2010-08-10 10:17:44

Flex內(nèi)存

2010-08-13 13:14:09

Flex圖表
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 免费成年网站 | 色精品视频| 亚洲美女一区 | 天天干天天插 | 亚洲电影一区 | 国产精品黄色 | 黑色丝袜三级在线播放 | 天天操天天操 | 久久久久久亚洲国产精品 | 国产一区二区三区免费观看在线 | 这里只有精品999 | 91久久国产综合久久91精品网站 | k8久久久一区二区三区 | 久久久久久免费毛片精品 | 午夜黄色 | 一区二区三区在线播放 | 九九精品在线 | 狠狠插狠狠操 | 国产精品区二区三区日本 | 中文字幕 国产精品 | 国产一区二区三区四区三区四 | 黄色一级大片在线观看 | 成人h片在线观看 | 免费中文字幕日韩欧美 | 在线婷婷| 精品久久久久久一区二区 | 亚洲精品久久久久久久久久久久久 | 亚洲国产aⅴ成人精品无吗 欧美激情欧美激情在线五月 | 成年女人免费v片 | 精品久久久久一区二区国产 | 一区二区久久电影 | 2020亚洲天堂| 国产综合久久久久久鬼色 | 国产高清精品在线 | 色噜噜色综合 | 成人av网站在线观看 | 91精品一区二区三区久久久久 | 亚洲欧美中文日韩在线 | 在线欧美视频 | 国产一区视频在线 | 免费成人在线网站 |