今天,天气依旧很热。整个房间像火炉一般炽热。今天来写写这方面的笔记,做个实验。看看如何运作,首先来讲这方面需要准备一些资料。就是关于数据库方面资料。因为手上资料很少,很多事情都是需要一步步探索。flash 不能直接和数据库进行交互(除air 之外),故此我们需要找一种平台搭配一些协作开发。目前很多流行的方案是多种多样,每一个家公司用的服务器都有所不同。据一些同事介绍,
搭配平台如下(1):java +flash +mysql 组合开发
(2):c++ +flash+sql组合开发
(3):php +flash+mysql 组合开发
还有FMS ,等等更多组合..........
flash 只是用于前端显示数据和交互,大部分交互数据方面需要借助其他语言帮助
目前而言mysql 已经可以满足很多开发公司,除非有特别需求动用到oracle 甲骨文这样的大型数据,但无论怎样组合目的就是要实现到产品。
好,现在开始做实验了。需要准备的材料是:java sdk tomcat ,mysql等一些工具。准备好之后,开始一步步摸索怎样交互。
我的目的是读取到数据库的数据。
当中实验当中遇到问题是(1) 怎样利用读取数据库的资料?
(2) 怎样返回数据给flash接收?
(3) 采用什么方式格式来交互?
(4) 格式应该如何选择?xml json 字符串?等
(5) 应该如何显示数据?
接下来,尝试实验第一种方式,也是最简单,最傻瓜的方式,我所知道的就是这样水平,所以要将这个实验带入一个开始阶段将不会掺杂更多完善的设计。出发的过程就需要尽量简单化。(O(∩_∩)O哈哈~)
初步意向:
flash 发送数据---->服务端 -------> 数据库
flash 接收数据<-----服务器<--------数据库
要进行这样,我们需要采用flash.net 包下URLLoader 进行发送数据(而flex 就采用Http 组件或者其他远程访问)。准备好之后,我们拥有的条件已经可以进行一个简单的发送了。
封装一个发送数据的类。用于交互 发送
创建news表
手动设计表:设置两个项 一个是id 另外一个 是title 这样的数据项。如图所示。
数据库名称为test ,表名为news 。
然后
手动为表添加一些数据入去。
测试数据库是否成功和数据库交互:
添加完数据库后,在这里会使用jsp 进行测试,而这种方式比较笨拙,而且效率不高,一般不会这样使用,但是这样做好处是为了省下时间做快速设计。而我们所在水平是如何,这些并不重要,关键是要适合我们,在方法当中寻找过程解决方案。这些才重要。技术水平因人而异
而其他更加优秀的做法,有一些人会严格使用框架技术,这样操作和链接数据库在效率提升不少。下面是已经链接到数据库的测试。
<%@ page contentType="text/html; charset=utf-8" language="java" import="java.sql.*" errorPage="" %> <% Connection con = null; try{ Class.forName("com.mysql.jdbc.Driver"); String dbUrl = "jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8"; String dbUser = "root"; String dbPwd = "123"; String sql="select * from news"; con = DriverManager.getConnection(dbUrl,dbUser,dbPwd); out.print("已连接。。。。。"); } catch(Exception ex) { out.print("连接失败!!
"+ex.toString()); } %>
数据库测试成功之后,我们需要的工作就是利用SQL 语句,查询数据并输出。jsp做法是
sql语句:String sql="select * from news";
创建一个Statement 对象,通过执行executeQuery返回。
Statement stmt=con.createStatement();
ResultSet rs=stmt.executeQuery(sql); //执行查询
查询的结果集,采用循环输出来
while(rs.next())
{
msg+=rs.getString("title")+"##";
}
out.clear();
out.print("newList="+msg);
你会看到一系列的数据出现了
<%@ page contentType="text/html; charset=utf-8" language="java" import="java.sql.*" errorPage="" %> <% Connection con = null; try{ Class.forName("com.mysql.jdbc.Driver"); String dbUrl = "jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8"; String dbUser = "root"; String dbPwd = "123"; String sql="select * from news"; con = DriverManager.getConnection(dbUrl,dbUser,dbPwd); out.print("已连接。。。。。"); Statement stmt=con.createStatement(); ResultSet rs=stmt.executeQuery(sql); //执行查询 String msg=""; while(rs.next()) { msg+=rs.getString("title")+"##"; } out.clear(); out.print("newList="+msg); stmt.close(); con.close(); } catch(Exception ex) { out.print("连接失败!!
"+ex.toString()); } %>
输出数据:
这里是由于在数据库预先插入去了。(方式依旧是人工和手动设计。呵呵)
flash接收数据
接下来,我们就需要解决发送的问题?问题是 怎样发送数据到flash客户端?
发送的 方式是多种多样,当中可以是名称/值 的方式发送,也可以按xml ,json 还有其他格式发送。
这里是从数据库接收到的数据。并显示出来的
按实验来进行一步步来制作。
封装一个类,进行发送数据
//用于与网页通信的类 package org.summerTree.net { import flash.net.URLLoader; import flash.net.URLRequest; import flash.events.*; import flash.net.URLVariables; import flash.net.URLLoaderDataFormat; import flash.net.*; public class HttpConnection extends EventDispatcher { public static const VARIABLES:String=URLLoaderDataFormat.VARIABLES; public static const BINARY:String=URLLoaderDataFormat.BINARY; public static const TEXT:String=URLLoaderDataFormat.TEXT; public function HttpConnection() { } /* *para 设置发送数据的 *http_url 设置发送数据的方式连接地址 *type post and get *format 格式 */ public function sendMessage(para:Object,http_url:String,type:String="post",format:String="VARIABLES"):void { var request:URLRequest=new URLRequest(); request.data=para; request.url=http_url; switch (type) { case "post" : request.method=URLRequestMethod.POST;//发送的方式 break; case "get" : request.method=URLRequestMethod.GET;//发送的方式 break; } //发送数据 var loader:URLLoader=new URLLoader(); switch (format) { case "VARIABLES" : loader.dataFormat=URLLoaderDataFormat.VARIABLES;//发送数据的格式 break; case "BIN" : loader.dataFormat=URLLoaderDataFormat.BINARY;//发送二进制数据的格式 break; case "TEXT" : loader.dataFormat=URLLoaderDataFormat.TEXT;//发送文本数据的格式 break; } loader.addEventListener(Event.COMPLETE,completeHandler); loader.addEventListener(IOErrorEvent.IO_ERROR ,IoHandler); try { loader.load(request); } catch (e:Error) { throw new Error(e); } } private function completeHandler(e:Event):void { //处理返回的结果,如果插入数据库成功那么就可以 var evt:ConnectionEvent=new ConnectionEvent(ConnectionEvent.COMPLETE); evt.data=URLLoader(e.target); this.dispatchEvent(evt); } private function IoHandler(e:Event):void { this.dispatchEvent(new ConnectionEvent(ConnectionEvent.WRONG)); } } }
其次:
//用于通信连接的事件类 package org.summerTree.net { import flash.events.Event; import flash.net.*; public class ConnectionEvent extends Event { public static const COMPLETE:String="complete"; public var data:URLLoader; public static const WRONG:String="wrong"; public function ConnectionEvent(type:String,bubbles:Boolean=false,cancelable:Boolean=false) { super(type,false,false); } override public function clone():Event { return new ConnectionEvent(type,false,false); } } }
package { import flash.display.Sprite; import flash.events.*; import flash.net.*; import org.summerTree.net.HttpConnection; import org.summerTree.net.ConnectionEvent; public class Main extends Sprite { private var sql:HttpConnection; private var url:String=ManagerURL.Address()+"index.jsp"; public function Main() { init(); } private function init():void { sql=new HttpConnection(); var obj:URLVariables=new URLVariables(); sql.sendMessage(obj,url); sql.addEventListener(ConnectionEvent.COMPLETE,onComplete); } private function onComplete(event:ConnectionEvent):void { var sqldata:*=event.data; var msg:String=sqldata.data.newList.toString(); var list:Array=msg.split("##"); var len:int=list.length; for(var i:int=0;i package { public final class ManagerURL { public function ManagerURL() { } public static function Address():String { return "http://localhost:8080/sql/" } } } 好乏味的东西已经准备完毕。到了解析的时候了。 在flash 里面会使用URLLoader进行发送数据,我们选择发送方式可以是post 和get 。接收数据 可以是二进制,文本,或者名称/值的方式进行。 jsp 发送的数据的过程,其实就是输出的过程当中,flash接收的是jsp输出的数据,out.print里面输出页面的数据。 接收的数据的时候,可以采用上面三种方式,而这些都是看个人需要而定。 在jsp ,使用这种名称/方式进行对于当flash 将设定的数据格式接收的时候 URLLoaderDataFormat.VARIABLES这种情况的时候。 在as3.0 的时候,设置为以下方式方式 newList是名称,可以随意的 out.print("newList="+msg); 这样flash 发送过来的是以字符串形式发送。在flash 将数据加载完毕之后,会通知flash 处理这些数据 var msg:String=sqldata.data.newList.toString(); 接收数据 采用URLLoader类来进行读取这个是data 已经填充好的数据里面。读取他们所需要的内容了。为了显示他们数据,我们准备动态文本 用于显示它的数据。 创建一个元件,在元件里面添加一个动态文本。如图,并进行库链接改名称为NewList 意思为新闻列表 for(var i:int=0;i 创建新闻条数,并显示出数据来。循环读取出来。 到目前为此,显示数据实验已经初步完成了。 后面的工具就是选择其他更加有效设计了和扩展。