Chinaunix首页 | 论坛 | 博客
  • 博客访问: 619759
  • 博文数量: 98
  • 博客积分: 10010
  • 博客等级: 上将
  • 技术积分: 1528
  • 用 户 组: 普通用户
  • 注册时间: 2007-08-28 16:20
文章分类

全部博文(98)

文章存档

2011年(1)

2010年(11)

2009年(44)

2008年(42)

我的朋友

分类: Java

2009-01-13 13:04:17

Flex+Java WebService with XFire

 

 

Java的查询与更新方法是通用的,在flex端传递sql语句。

 

工具:MyEclipse6.0+Tomcat6.0+Flex Builder3+sqlserver2000

 

首先建立一个java Web Service Project,然后建个Web Service服务文件DataService XFire 默认会添加,再建个连接数据库类connjava端基本搞定。

 

由于没有用lcds所以在flex端不能自动将map转换为object,所以使用了两个for each将保存在map中的数据取出来。

 

数据库Script(test.sql):

use master

if exists(select * from sysdatabases where name='test')

         drop database test

go

 

create database test

go

 

use test

go

 

create table users

(

         id int identity(1,1) primary key,

         username varchar(16) not null,

         password varchar(16) not null

)

go

 

create table score

(

         id int identity(1,1) primary key,

         username varchar(16),

         score int

)

go

 

insert into users values('zhaobo','123456')

insert into users values('benben','123456')

insert into users values('kelvin','123456')

insert into users values('michelle','123456')

go

 

insert into score values('benben',100)

insert into score values('kelvin',50)

go

 

select * from users

select * from score

 

Java文件结构:

 

conn.java:

package service;

 

import java.sql.*;

 

public class Conn {

   

    Connection conn=null;

 

    public Conn() {

       // TODO Auto-generated constructor stub

    }

   

    public Connection getConnection()

    {

       try {

           Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

           String url="jdbc:odbc:driver={SQL Server};database=test;server=.";

           conn=DriverManager.getConnection(url);

       } catch (ClassNotFoundException e) {

           // TODO Auto-generated catch block

           e.printStackTrace();

       } catch (SQLException e) {

           // TODO Auto-generated catch block

           e.printStackTrace();

       }

      

       return conn;

    }

}

 

IDataSerivice.java:

package service;

 

import java.util.Collection;

import java.util.Map;

 

public interface IDataSerivice {

   

    public Collection query(String sql);

    public String update(String sql);

   

}

 

DataSeriviceImpl.java:

package service;

 

import java.sql.*;

import java.util.ArrayList;

import java.util.Collection;

import java.util.HashMap;

import java.util.Map;

 

public class DataSeriviceImpl implements IDataSerivice {

    Connection con=null;

    Statement stmt=null;

    ResultSet rs=null;

   

    Conn conn;

   

    public DataSeriviceImpl()

    {

       conn=new Conn();

    }

   

    //查询方法

    public Collection query(String sql) {

       ArrayList arr=new ArrayList();

      

       try {

           con=conn.getConnection();

           stmt=con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);

           rs=stmt.executeQuery(sql);

          

           //获取总列数

           ResultSetMetaData rsmd=rs.getMetaData();

           int columns=rsmd.getColumnCount();

          

           //将列名保存到字符数组中

           String[] columnName=new String[columns];

           for(int i=0;i

           {

              columnName[i]=rsmd.getColumnName(i+1);

           }

          

           //将数据保存到哈希表中,然后将HashMap添加到ArrayList

           while(rs.next())

           {

              HashMap map=new HashMap();

              for(int j=0;j

              {

                  map.put(columnName[j], rs.getString(j+1));

                  //System.out.println(map.get(columnName[j]));

              }

              arr.add(map);

           }

          

           rs.close();

           stmt.close();

           con.close();

       } catch (SQLException e) {

           e.printStackTrace();

       }

      

       return arr;

    }

   

    //更新方法

    public String update(String sql)

    {

       String flag="NoUpdate";

      

       int i=0;

       try {

           con=conn.getConnection();

           stmt=con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);

          

           i=stmt.executeUpdate(sql);

           if(i>0)

              flag="Success";

          

           stmt.close();

           con.close();

       } catch (SQLException e) {

           flag="Error";

           e.printStackTrace();

       }

      

       return flag;

    }

}

 

service.xml

xml version="1.0" encoding="UTF-8"?>

<beans xmlns="">

 

    <service>

       <name>DataServicename>

       <serviceClass>service.IDataSeriviceserviceClass>

       <implementationClass>

           service.DataSeriviceImpl

       implementationClass>

       <style>wrappedstyle>

       <use>literaluse>

       <scope>applicationscope>

    service>

beans>

 

web.xml

xml version="1.0" encoding="UTF-8"?>

<web-app xmlns="" xmlns:xsi="" version="2.4" xsi:schemaLocation="   /web-app_2_4.xsd">

  <servlet>

    <servlet-name>XFireServletservlet-name>

    <servlet-class>org.codehaus.xfire.transport.http.XFireConfigurableServletservlet-class>

    <load-on-startup>0load-on-startup>

  servlet>

  <servlet-mapping>

    <servlet-name>XFireServletservlet-name>

    <url-pattern>/*url-pattern>

  servlet-mapping>

  <welcome-file-list>

    <welcome-file>index.jspwelcome-file>

  welcome-file-list>

web-app>

 

Flex文件

DataTest.xml:

xmlns:mx="" layout="absolute">

 

   

      

           import mx.rpc.events.FaultEvent;

           import mx.collections.ArrayCollection;

           import mx.rpc.events.ResultEvent;

          

           private function getUser():void

           {

              ws.query.addEventListener(ResultEvent.RESULT,getUserHandler);

              ws.query("select * from users");

           }

           private function getUserHandler(event:ResultEvent):void

           {

              ws.query.removeEventListener(ResultEvent.RESULT,getUserHandler);

              dgUser.dataProvider=convert(event);

           }

          

           private function getScore():void

           {

              ws.query.addEventListener(ResultEvent.RESULT,getScoreHandler);

              ws.query("select * from score");

           }

           private function getScoreHandler(event:ResultEvent):void

           {

              ws.query.removeEventListener(ResultEvent.RESULT,getScoreHandler);

              dgScore.dataProvider=convert(event);

           }

          

           private function convert(event:ResultEvent):ArrayCollection

           {

              var ac:ArrayCollection=new ArrayCollection();

             

              for each(var item:Object in event.result)

              {

                  var user:Object=new Object();

                  for each(var obj:Object in item)

                  {

                     user[obj["key"]]=obj["value"];

                     //trace(obj["key"]+":"+user[obj["key"]]);

                  }

                  ac.addItem(user);

              }

              return ac;

           }

          

           private function update():void

           {

              ws.update("update score set score=60 where username='kelvin'");

           }

           private function updateResult(event:ResultEvent):void

           {

              lblMsg.text=event.result.toString();

           }

          

           private function wsFault(event:FaultEvent):void

           {

              trace(event.message);

           }

       ]]>

   

   

    id="ws" wsdl="" showBusyCursor="true" fault="wsFault(event)">

       name="query"/>

       name="update" result="updateResult(event)"/>

   

   

    x="10" y="10" label="query users" click="getUser()"/>

    x="329" y="10" label="query score" click="getScore()"/>

   

    id="dgUser" x="10" y="40" width="298" height="215">

      

           headerText="id" dataField="id"/>

           headerText="username" dataField="username"/>

           headerText="password" dataField="password"/>

      

   

   

    id="dgScore" x="329" y="43" width="269" height="212">

      

           headerText="id" dataField="id"/>

           headerText="username" dataField="username"/>

           headerText="score" dataField="score"/>

      

   

   

    id="btnUpdate" label="update" click="update()" x="10" y="263"/>

    id="lblMsg" x="10" y="293" text=""/>

   

 

阅读(981) | 评论(0) | 转发(0) |
0

上一篇:一个权限管理示例

下一篇:辞旧迎新

给主人留下些什么吧!~~