分类: 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 默认会添加,再建个连接数据库类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
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
ArrayListnew 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
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:
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);
}
]]>