首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 媒体动画 > flex >

flex联接java的一种方法(转载)

2012-09-13 
flex连接java的一种方法(转载)flex连接java的一种方法(转载) 2010年01月26日  首先,做一点说明。Flex是不能

flex连接java的一种方法(转载)

flex连接java的一种方法(转载)
2010年01月26日
  首先,做一点说明。Flex是不能直接连接数据库的,这一点大家需要知道,它只能间接地连接数据库。
  Flex中提供了三种方式:HttpService,WebService 和 RemoteObject。其中HttpService可以直接获取XML
  中的数据,还可以通过JSP,ASP以及PHP读取数据库中的数据,这个比较简单,而且网上也有很多例子,我就
  不多说了。WebService我不懂,请自己查资料。我一直用的是JAVA对象连接数据库,感觉这个挺方便,而且
  J2EE的技术已经很成熟。今天的教程就是以 Flex + JAVA + SQLServer 获取数据库公告信息为例简单说一
  下RemoteObject的用法。
  前提
  1.确保你安装了Flex Data Service。这个对于单个CUP无限APP是免费的,可以去Adobe下载。如果只是读取
  XML文件是不需要这个的,连接数据库就需要它了。
  2.安装了Flex Builder或者有Flex SDK。我这里使用的是Flex Builder(IDE就是方便啊 ^_^)。
  3.安装了SQLServer数据库。
  4.安装了JRUN或者tomcat或其它的J2EE容器,因为发布的时候我们的程序要运行在J2EE平台上。
  5.安装了JDK。
  第一步:创建数据库
  这里我们有一个公告表,表名为Bulletin。结构如下:
  字段名称           字段类型            说明
  ID              自动编号          自动编号
  title           Nvarchar(100)    题目
  date            datatime         日期
  author         Nvarchar(20)      作者
  contents        ntext                内容
  在数据库中创建这个表。保存之后进入下一步。
  第二步:在JAVA中编写获取公告的代码
  首先,我们要创建一个公告类来专门保存获取的公告信息,代码如下。
  NoticeInfo.java
  package net.zhuoqun.connectDB;
  import java.util.Date;
  public class NoticeInfo {
  private String title;        // 标题
  private String author; // 作者
  private String content;// 内容
  private Date dates;       // 时间   
  public String getAuthor() {
  return author;
  }
  public void setAuthor(String author) {
  this.author = author;
  }
  ……………… // 其它get 和 set 方法。
  }
  创建好这个之后我们要创建一个数据查询类:DataServiceImpl.java 来查询数据库,并将查询结果传给将
  要创建的Flex程序。由于我们不清楚有多少条记录,所以就借助一下JAVA中的ArrayList这个类,它位于
  java.util 包中。先创建一个ArrayList:
  ArrayList noticeList = new ArrayList();
  查询数据库之后,每读取一条记录就添加到 noticeList。
  while(rs.next()){
  NoticeInfo temp = new NoticeInfo();
  temp.setAuthor(rs.getString("author"));
  temp.setContent(rs.getString("content"));
  temp.setDates(rs.getDate("date"));
  temp.setTitle(rs.getString("title"));
  noticeList.add(temp);
  }
  查询完毕之后你就可以把这个noticeList传回去,你也可以传回去一个 NoticeInfo 数组:
  NoticeInfo[] notices = new NoticeInfo[noticeList.size()];
  for(int i=0;iFlex中会变成ArrayCollection类型的。
  现在JAVA部分的代码就写好了。
  DataServiceImpl.java 的全部代码如下:
  package net.zhuoqun.connectDB;
  import java.sql.*;
  import java.util.ArrayList;
  import java.util.Date;
  public class DataServiceImpl {   
  private Connection conn = null;
  private Statement stmt = null;
  // 以下是数据库以及驱动信息
  public final static String DRIVER = "com.microsoft.jdbc.sqlserver.SQLServerDriver";
  public final static String CONN_STR_PRE = "jdbc:microsoft:sqlserver://";
  public final static String HOST_NAME = "localhost:1433;";
  public final static String DATABASE_NAME = "DatabaseName=mydata";
  public final static String USERNAME = "aaa";
  public final static String PASSWORD = "aaa";
  public DataServiceImpl(){
  }
  // 查询数据库
  private ResultSet executeQuery(String sqlText){
  try{
  Class.forName(DRIVER);
  }catch(ClassNotFoundException e){
  e.printStackTrace();
  }
  try{
  conn = DriverManager.getConnection(CONN_STR_PRE + HOST_NAME + DATABASE_NAME,
  USERNAME, PASSWORD);
  stmt = conn.createStatement();
  ResultSet rs = stmt.executeQuery(sqlText);
  return rs;
  }catch(SQLException e){
  e.printStackTrace();
  }
  return null;
  }
  // 查询公告. 这个是本程序的关键代码
  public NoticeInfo[] getNotices(){
  ArrayList noticeList = new ArrayList();      
  String sqlText = "select author,content,date,title from Bulletin";      
  ResultSet rs = executeQuery(sqlText);       
  try{
  while(rs.next()){
  NoticeInfo temp = new NoticeInfo();
  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 = new NoticeInfo[noticeList.size()];
  for(int i=0;iFlex Data Service
  1,把刚才写的JAVA文件编译。打开FDS的安装文件夹,将编译的文件拷贝到
  \jrun4servers\default\flex\WEB-INF\classes 文件夹中,进行下面的配置。
  2.打开FDS的安装文件夹。进入 jrun4\servers\default\flex\WEB-INF\flex 目录。里面是关于Flex Data
  Service 的配置文件,我们这里只看RemoteObject如何配置,其它配置信息请自己看帮助。现在我们打开里
  面的 remoting-config.xml 文件。向里面添加如下信息,作为的子标签:
  程序代码
  
  
  net.zhuoqun.connectDB.DataServiceImpl
  
  
  当你设定了 destination 的时候,你就引用了了可以用来连接相应类的信息通道(messaging
  channel)。它的 id 必须在文件中是独一无二的。 source属性是指你编译的JAVA类在classes文件夹中的
  路径。由于我的DataServiceImpl类在classes\net\zhuoqun\connectDB中,所以source的值为
  net.zhuoqun.connectDB.DataServiceImpl。记住,不要写.class后缀。 标签还可以有一个
  子标签,其作用我在这里就不说了,大家自己看相关文档(关于FDS的配置其实有很多东西,这些在
  帮助文档里都有,我这里不多说了,也说不过来,自己看吧)。
  现在我们已经配置好了后台的 FDS,做完了整个程序的大部分工作,接下来就是前台Flex程序调用的事情
  了。
  第四步:创建Flex程序
  打开Flex Builder,新建一个工程 ConnectDB。菜单栏中 File -> New -> Flex Project,这时会弹出
  一个对话框,选择 Flex Data Service,创建了一个Flex工程。
  第五步:通过 RemoteObject 访问数据库
  打开工程中生成的主文件 ConnectDB.mxml,声明一个 RemoteObject :
  程序代码
  
  其中 destination 的值是刚才我们在配置 FDS 的时候设定的 destination。 result 表示在这个
  RemoteObject 成功返回之后所要做的动作,这里我们调用一个方法 proccessResult()来处理返回的数据,
  它的参数 event.result 就是从服务器段获得的数据,数据是作为一个对象传过来的。 fault 表示在这个
  RemoteObject请求失败时要做的处理,这里我们会弹出一个显示错误信息的对话框。接下来我们要声明一个
  DataGrid控件来显示公告的标题和发布日期:
  程序代码
  
  
  
  
  
  
  其中headerText是显示在上方的表头,dataField表示要显示的数据域,为什么数据域是title和dates
  呢?因为我们传回的是一个 NoticeInfo 对象数组,虽然它是作为一个对象传回来的,但是其中的数据结构
  并没有变,那些数据域的名字也没有变,所以我们可以根据 NoticeInfo 中的变量设定dataField。
  labelFunction 属性是用来格式化显示的,因为传回来的是格林威治时间,所以我们需要将其格式化然后显
  示出来。注意,这里只是显示两个数据域,并不代表其它的数据都没有了,它们仍然存在,只是没有显示出
  来。
  接下来,在  标签中编写proccessResult()方法和格式化日期的 formatDate方法:
  程序代码
  private function proccessResult(result:Object):void
  {
  myDG.dataProvider = ArrayUtil.toArray(result);
  }
  private function formatDate(item:Object,column:DataGridColumn):String
  {
  return df.format(item.dates);
  }    // df 是一个 DateFormatter,在下面会给出。关于如何格式化DataGrid的显示
  // 以及DateFormatter这里就不讨论了,帮助里写得很清楚
  这个函数只是简单地将获得的数据传给 myDG 的 dataProvider。result 的类型是Object,因为数据是
  作为一个对象传过来的。之所以调用 ArrayUtil.toArray() 这个方法,是因为返回的记录可能只有一条,
  而myDG 的 dataProvider显示单个对象的时候可能会出错,所以安全起见先将其转换成数组。
  最后,我们编写调用 RemoteObject 的方法,使其在程序启动时就调用。
  程序代码
  private function initApp():void
  {
  getData.getNotices();
  }
  其中 getData 是RemoteObject的 id,getNotices()是DataServiceImpl.java中的方法。在这里可以直
  接调用它。当然,如果DataServiceImpl.java有其它方法,也可以通过这种方式直接调用。接下来设定组件
  创建完毕时调用 initApp()方法,在 中添加一个creationComplete属性:
  程序代码
  
  ConnectDB.mxml的全部代码:
  程序代码
  
  
  
  
  
  
    
  
  
  
  
  
  
  
  整个工程终于完成,启动JRUN,然后运行程序,查看程序结果

热点排行