使用Flex,Java,Json更新Mysql数据

一直都只有看到从Mysql读取数据到Flex app中然后显示在DataGrid控件中。还很少见到从Flex app中的Datagrid取得数据写回数据库的例子。在网上搜索了找到一篇用Flex,PHP,JSON的方法:具体请参考:Using Flex, PHP, and JSON to Modify a MySQL Database 。写的非常的简单明白,可惜的是自己没学过PHP。无法按照例子上完整的去实现,所以我把它更改用Java-Json的方法来实现同样的功能。
首先来看下这个例子的界面功能设计:包含一个dataGrid控件,两个按钮(读取和更新数据)以及一个Label控件用来提示用户操作的结果。 dataGrid包含四个列:员工的编号,姓名,性别以及部门。其中姓名这个列是可以编辑修改的:编辑后通过检查后,按更新按钮更新数据库。
接着来看下工作流程:Flex app是通过remoteObject方式与后台的java bean沟通的,然后在由java bean连接mysql database,读取或更新数据。然后返回给flex app. 由于使用blazeDS,flex app可以直接调用java 的方法,所以发送请求和接受数据都变的简单了。
那么,我门开始工作了。
首先,创建一个数据库:在mysql提示框中输入以下的SQL就可以创建一个简单的员工信息资料表。
CREATE DATABASE IF NOT EXISTS test;
USE test;
DROP TABLE IF EXISTS `employee`;
CREATE TABLE `employee` (
`id` varchar(10) NOT NULL,
`name` varchar(45) NOT NULL,
`gender` varchar(10) NOT NULL,
`department` varchar(45) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
我们来先看看那后台java bean的处理:他要接受flex app的读取数据和更新数据的请求,而且他们之间的数据传递格式采用的是json.所以我们的java bean的一个框架结构应该是:
public class JsonGrid {
private Connection con = null;
private String myDriver = "com.mysql.jdbc.Driver";
private String conURL = "jdbc:mysql://localhost:3306/test";
private String userName = "root";
private String userPass = "12345";
public Connection conToDB(){
try{
Class.forName(myDriver);
con = DriverManager.getConnection(conURL,userName,userPass);
}catch(Exception e){
e.printStackTrace();
}
return con;
}
public String getJsonArray(){
String result= new String();
return result;
}
public String sendJsonArray(String jsonData){
String result= new String();
return result;
}
}
里面包含了两个重要的方法(getJsonArray()和sendJsonArray())分别对应flex app的读取数据和更新数据的请求。在getJsonArray()方法中,要连接数据库,取得员工的信息资料,然后按照json格式封装数据,结果返回 给flex app,由flex app中的datagrid显示出来。我们具体看看getJsonArray()这个方法:
public String getJsonArray(){
JSONArray jsonEmployeeArray = new JSONArray();
ResultSet rs = null;
String result= new String();
try{
Connection conToDb = conToDB();
Statement stmt = conToDb.createStatement();
rs=stmt.executeQuery("select * from employee");
while(rs.next()){
JSONObject jsonEmployee = new JSONObject();
jsonEmployee.put("id", rs.getString("id"));
jsonEmployee.put("name", rs.getString("name"));
jsonEmployee.put("gender", rs.getString("gender"));
jsonEmployee.put("department", rs.getString("department"));
jsonEmployeeArray.add(jsonEmployee);
}
result = jsonEmployeeArray.toString();
conToDb.close();
//result = new JSONObject().put("jsonEmployeeArray",jsonEmployeeArray).toString();
}catch(SQLException ex){
ex.printStackTrace();
}
return result;
}
内容其实都很简单,只是读取数据和封装成json格式的数据,最后把json array格式的jsonEmployeeArray转换成string格式传输给flex app.即return语句。而当flex app要使用这个json array格式的数据,自然需要按照json格式解码等,后面在介绍。接着看看那个更新数据的方法sendJsonArray():
public String sendJsonArray(String jsonData){
String result= new String();
//jsonData = jsonData.replace("\\", "");
JSONArray jsonArray = JSONArray.fromObject(jsonData);
try{
Connection conToDb = conToDB();
Statement stmt = conToDb.createStatement();
for(int i=0;i<jsonArray.size();i++){
JSONObject jsonObject = JSONObject.fromObject(jsonArray.getString(i));
String id = jsonObject.getString("id");
String name = jsonObject.getString("name");
stmt.executeUpdate("update employee set name='"+name+"' where id='"+id+"'");
}
result="恭喜,成功更新数据!";
conToDb.close();
}catch(Exception e){
e.printStackTrace();
}
return result;
}
即把flex app传递过来的String类型的json格式的的数据解码开来,然后根据对应的Id把更新后的名字保存在数据库中。这里我们传递过来的是整个 datagrid的信息,不管是有没有更新的,都要循环的更新所有员工的信息。所以呢,在你的程序中你的JsonGrid.java文件应该类似:
package jsongrid;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
public class JsonGrid {
private Connection con = null;
private String myDriver = "com.mysql.jdbc.Driver";
private String conURL = "jdbc:mysql://localhost:3306/test";
private String userName = "root";
private String userPass = "liceven";
public Connection conToDB(){
try{
Class.forName(myDriver);
con = DriverManager.getConnection(conURL,userName,userPass);
}catch(Exception e){
e.printStackTrace();
}
return con;
}
public String getJsonArray(){
JSONArray jsonEmployeeArray = new JSONArray();
ResultSet rs = null;
String result= new String();
try{
Connection conToDb = conToDB();
Statement stmt = conToDb.createStatement();
rs=stmt.executeQuery("select * from employee");
while(rs.next()){
JSONObject jsonEmployee = new JSONObject();
jsonEmployee.put("id", rs.getString("id"));
jsonEmployee.put("name", rs.getString("name"));
jsonEmployee.put("gender", rs.getString("gender"));
jsonEmployee.put("department", rs.getString("department"));
jsonEmployeeArray.add(jsonEmployee);
}
result = jsonEmployeeArray.toString();
conToDb.close();
//result = new JSONObject().put("jsonEmployeeArray",jsonEmployeeArray).toString();
}catch(SQLException ex){
ex.printStackTrace();
}
return result;
}
public String sendJsonArray(String jsonData){
String result= new String();
//jsonData = jsonData.replace("\\", "");
JSONArray jsonArray = JSONArray.fromObject(jsonData);
try{
Connection conToDb = conToDB();
Statement stmt = conToDb.createStatement();
for(int i=0;i<jsonArray.size();i++){
JSONObject jsonObject = JSONObject.fromObject(jsonArray.getString(i));
String id = jsonObject.getString("id");
String name = jsonObject.getString("name");
stmt.executeUpdate("update employee set name='"+name+"' where id='"+id+"'");
}
result="恭喜,成功更新数据!";
conToDb.close();
}catch(Exception e){
e.printStackTrace();
}
return result;
}
}
http://yexin218.iteye.com/blog/201533
Tags: 

延伸阅读

最新评论

发表评论