歡迎點(diǎn)擊此處訂閱本Blog" />

亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

使用Flex+JavaBean連接SQL Server數(shù)據(jù)庫

系統(tǒng) 1775 0
<!-- Feedsky FEED發(fā)布代碼開始 --> 歡迎點(diǎn)擊此處訂閱本Blog <!-- FEED自動(dòng)發(fā)現(xiàn)標(biāo)記開始 --> <link title="RSS 2.0" type="application/rss+xml" rel="alternate"> <!-- FEED自動(dòng)發(fā)現(xiàn)標(biāo)記結(jié)束 --> Blog 訂閱

<!--Google 468*60橫幅廣告開始--><script type="text/javascript"><!-- google_ad_client = "pub-7343546549496470"; google_ad_width = 468; google_ad_height = 60; google_ad_format = "468x60_as"; google_ad_type = "image"; //2007-07-26: CSDN google_ad_channel = "6063905817"; google_color_border = "6699CC"; google_color_bg = "E6E6E6"; google_color_link = "FFFFFF"; google_color_text = "333333"; google_color_url = "AECCEB"; google_ui_features = "rc:6"; //--> </script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script><!--Google 468*60橫幅廣告結(jié)束-->

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

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

第一步:創(chuàng)建數(shù)據(jù)庫
這里我們有一個(gè)公告表,表名為Bulletin。結(jié)構(gòu)如下:
字段名稱 字段類型 說明
ID 自動(dòng)編號(hào) 自動(dòng)編號(hào)
title Nvarchar(100) 題目
date datatime 日期
author Nvarchar(20) 作者
contents ntext 內(nèi)容
在數(shù)據(jù)庫中創(chuàng)建這個(gè)表。保存之后進(jìn)入下一步。

第二步:在JAVA中編寫獲取公告的代碼
首先,我們要?jiǎng)?chuàng)建一個(gè)公告類來專門保存獲取的公告信息,代碼如下。
NoticeInfo.java
  1. package net.zhuoqun.connectDB;
  2. import java.util.Date;
  3. public class NoticeInfo{
  4. private Stringtitle; //標(biāo)題
  5. private Stringauthor; //作者
  6. private Stringcontent; //內(nèi)容
  7. private Datedates; //時(shí)間
  8. public StringgetAuthor(){
  9. return author;
  10. }
  11. public void setAuthor(Stringauthor){
  12. this .author=author;
  13. }
  14. ……………… //其它get和set方法。
  15. }
創(chuàng)建好這個(gè)之后我們要?jiǎng)?chuàng)建一個(gè)數(shù)據(jù)查詢類:DataServiceImpl.java 來查詢數(shù)據(jù)庫,并將查詢結(jié)果傳給將要?jiǎng)?chuàng)建的Flex程序。由于我們不清楚有多少條記錄,所以就借助一下JAVA中的ArrayList這個(gè)類,它位于 java.util 包中。先創(chuàng)建一個(gè)ArrayList:
ArrayList noticeList = new ArrayList();
查詢數(shù)據(jù)庫之后,每讀取一條記錄就添加到 noticeList。
  1. while (rs.next()){
  2. NoticeInfotemp= new NoticeInfo();
  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= new NoticeInfo[noticeList.size()];
  2. for ( int i= 0 ;i<noticeList.size();i++){
  3. notices=(NoticeInfo)noticeList.get(i);
  4. }
  5. return notices;
我這里用的是后一種方法。如果你直接把noticeList傳回去的話,記住一點(diǎn),JAVA的ArrayList類型的對(duì)象到了Flex中會(huì)變成ArrayCollection類型的。

現(xiàn)在JAVA部分的代碼就寫好了。
DataServiceImpl.java 的全部代碼如下:
  1. package net.zhuoqun.connectDB;
  2. import java.sql.*;
  3. import java.util.ArrayList;
  4. import java.util.Date;
  5. public class DataServiceImpl{
  6. private Connectionconn= null ;
  7. private Statementstmt= null ;
  8. //以下是數(shù)據(jù)庫以及驅(qū)動(dòng)信息
  9. public final static StringDRIVER= "com.microsoft.jdbc.sqlserver.SQLServerDriver" ;
  10. public final static StringCONN_STR_PRE= "jdbc:microsoft:sqlserver://" ;
  11. public final static StringHOST_NAME= "localhost:1433;" ;
  12. public final static StringDATABASE_NAME= "DatabaseName=mydata" ;
  13. public final static StringUSERNAME= "aaa" ;
  14. public final static StringPASSWORD= "aaa" ;
  15. public DataServiceImpl(){
  16. }
  17. //查詢數(shù)據(jù)庫
  18. private ResultSetexecuteQuery(StringsqlText){
  19. try {
  20. Class.forName(DRIVER);
  21. } catch (ClassNotFoundExceptione){
  22. e.printStackTrace();
  23. }
  24. try {
  25. conn=DriverManager.getConnection(CONN_STR_PRE+HOST_NAME+DATABASE_NAME,USERNAME,PASSWORD);
  26. stmt=conn.createStatement();
  27. ResultSetrs=stmt.executeQuery(sqlText);
  28. return rs;
  29. } catch (SQLExceptione){
  30. e.printStackTrace();
  31. }
  32. return null ;
  33. }
  34. //查詢公告.這個(gè)是本程序的關(guān)鍵代碼
  35. public NoticeInfo[]getNotices(){
  36. ArrayListnoticeList= new ArrayList();
  37. StringsqlText= "selectauthor,content,date,titlefromBulletin" ;
  38. ResultSetrs=executeQuery(sqlText);
  39. try {
  40. while (rs.next()){
  41. NoticeInfotemp= new NoticeInfo();
  42. temp.setAuthor(rs.getString( "author" ));
  43. temp.setContent(rs.getString( "content" ));
  44. temp.setDates(rs.getDate( "date" ));
  45. temp.setTitle(rs.getString( "title" ));
  46. noticeList.add(temp);
  47. }
  48. NoticeInfo[]notices= new NoticeInfo[noticeList.size()];
  49. for ( int i= 0 ;i<noticeList.size();i++){
  50. notices=(NoticeInfo)noticeList.get(i);
  51. }
  52. return notices;
  53. } catch (SQLExceptione){
  54. e.printStackTrace();
  55. return null ;
  56. }
  57. }
  58. }
第三步: 配置Flex Data Service
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)于Flex Data Service 的配置文件,我們這里只看RemoteObject如何配置,其它配置信息請(qǐng)自己看幫助。現(xiàn)在我們打開里面的 remoting-config.xml 文件。向里面添加如下信息,作為<service>的子標(biāo)簽:
程序代碼
  1. < destination id = "dataService" >
  2. < properties >
  3. < source > net.zhuoqun.connectDB.DataServiceImpl </ source >
  4. </ properties >
  5. </ destination >
你設(shè)定了 destination 的時(shí)候,你就引用了了可以用來連接相應(yīng)類的信息通道(messaging channel)。它的 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程序
打開Flex Builder,新建一個(gè)工程 ConnectDB。菜單欄中 File -> New -> Flex Project,這時(shí)會(huì)彈出一個(gè)對(duì)話框,選擇 Flex Data Service,創(chuàng)建了一個(gè)Flex工程。

第五步:通過 RemoteObject 訪問數(shù)據(jù)庫
打開工程中生成的主文件 ConnectDB.mxml,聲明一個(gè) RemoteObject :
程序代碼
  1. < mx:RemoteObject id = "getData" destination = "dataService" result = "proccessResult(event.result)" fault = "Alert.show(event.fault.faultString,'Error')" />
其中 destination 的值是剛才我們?cè)谂渲?FDS 的時(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. < mx:DataGrid id = "myDG" >
  2. < mx:columns >
  3. < mx:DataGridColumn headerText = "標(biāo)題" dataField = "title" />
  4. < mx:DataGridColumn headerText = "發(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. private functionproccessResult(result:Object): void
  2. {
  3. myDG.dataProvider=ArrayUtil.toArray(result);
  4. }
  5. private functionformatDate(item:Object,column:DataGridColumn):String
  6. {
  7. return df.format(item.dates);
  8. } //df是一個(gè)DateFormatter,在下面會(huì)給出。關(guān)于如何格式化DataGrid的顯示
  9. //以及DateFormatter這里就不討論了,幫助里寫得很清楚
這個(gè)函數(shù)只是簡(jiǎn)單地將獲得的數(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();
  4. }
其中 getData 是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:Application xmlns:mx = "http://www.adobe.com/2006/mxml" fontSize = "12" creationComplete = "initApp()" >
ConnectDB.mxml的全部代碼:
程序代碼
  1. <? xml version = "1.0" encoding = "utf-8" ?>
  2. < mx:Application xmlns: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是一個(gè)DateFormatter,在下面會(huì)給出。關(guān)于如何格式化DataGrid的顯示
  19. //以及DateFormatter這里就不討論了,幫助里寫得很清楚
  20. ]]>
  21. </ mx:Script >
  22. < mx:DateFormatter id = "df" formatString = "YYYY-MM-DD" />
  23. < mx:RemoteObject id = "getData" destination = "dataService" result = "proccessResult(event.result)" fault = "Alert.show(event.fault.faultString,'Error')" />
  24. < mx:DataGrid id = "myDG" >
  25. < mx:columns >
  26. < mx:DataGridColumn headerText = "標(biāo)題" dataField = "title" />
  27. < mx:DataGridColumn headerText = "發(fā)布日期" dataField = "dates" labelFunction = "formatDate" />
  28. </ mx:columns >
  29. </ mx:DataGrid >
  30. </ mx:Application >
整個(gè)工程終于完成,啟動(dòng)JRUN,然后運(yùn)行程序,查看程序結(jié)果。如果是其他數(shù)據(jù)庫,只需要改一下數(shù)據(jù)庫驅(qū)動(dòng)信息就可以了。

<!--新Google 468*60橫幅廣告開始--><script type="text/javascript"><!-- google_ad_client = "pub-7343546549496470"; /* 468x60, 創(chuàng)建于 08-8-6 */ google_ad_slot = "7368701459"; google_ad_width = 468; google_ad_height = 60; //--> </script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script><!--新Google 468*60橫幅廣告結(jié)束-->

<!--新Google 468x15 橫鏈接單元開始--><script type="text/javascript"><!-- google_ad_client = "pub-7343546549496470"; /* 468x15 橫鏈接單元 */ google_ad_slot = "5785741422"; google_ad_width = 468; google_ad_height = 15; //--> </script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script><!--新Google 468x15 橫鏈接單元結(jié)束-->

<!-- Google Reader shared發(fā)布代碼開始 --><script type="text/javascript" src="http://www.google.com/reader/ui/publisher.js"></script><script type="text/javascript" src="http://www.google.com/reader/public/javascript/user/00697638153916680411/state/com.google/broadcast?n=5&amp;callback=GRC_p(%7Bc%3A%22green%22%2Ct%3A%22%5Cu8FD9%5Cu4E9B%5Cu6587%5Cu7AE0%5Cu4E5F%5Cu503C%5Cu5F97%5Cu4E00%5Cu770B%22%2Cs%3A%22false%22%7D)%3Bnew%20GRC"></script><!-- Google Reader shared發(fā)布代碼結(jié)束 -->

使用Flex+JavaBean連接SQL Server數(shù)據(jù)庫


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 日本伊人 | 欧美 日韩 成人 | 久久视频精品36线视频在线观看 | 人人鲁免费播放视频人人香蕉 | 欧美一级黄色毛片 | 日日影院 | 欧美日韩一区二区在线观看视频 | 久久久久久综合一区中文字幕 | 欧美亚洲国产成人精品 | 干一干操一操 | 久久九九久精品国产 | 99久久一香蕉国产线看观看 | 免费黄色的视频 | 久久毛片免费看 | 欧美成免费 | 夜间福利在线观看 | 婷婷网五月天天综合天天爱 | 四虎永久在线免费观看 | 日韩免费在线视频观看 | 久久久麻豆 | 亚州色吧| 成人精品国产 | 欧美日韩操 | 国产成人午夜精品5599 | 国内精品一区视频在线播放 | 四虎精品国产一区二区三区 | 亚洲波多野结衣日韩在线 | 911视频免费版| 精品91| 全毛片| 亚洲综合色视频在线观看 | 综合色区 | 久久久久综合精品福利啪啪 | 久久99精品久久久久久三级 | 成人久久网站 | 麻豆久久精品免费看国产 | 日韩亚洲欧美一区二区三区 | 亚洲欧美综合一区二区三区四区 | 韩国日本美国免费毛片 | 国产精品久久久久久搜索 | 久久在线资源 |