- 论坛徽章:
- 0
|
Flex+Java WebService with XFire
Java的查询与更新方法是通用的,在flex端传递sql语句。
工具:MyEclipse6.0+Tomcat6.0+Flex Builder3+sqlserver2000
首先建立一个java Web Service Project,然后建个Web Service服务文件DataService, XFire 默认会添加,再建个连接数据库类conn,java端基本搞定。
由于没有用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=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="http://xfire.codehaus.org/config/1.0">
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="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.4" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/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="http://www.adobe.com/2006/mxml" 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="http://localhost:8080/DataService/DataService?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=""/>
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u1/47207/showart_1795167.html |
|