flash与数据库读取数据库数据.docx
《flash与数据库读取数据库数据.docx》由会员分享,可在线阅读,更多相关《flash与数据库读取数据库数据.docx(18页珍藏版)》请在冰豆网上搜索。
![flash与数据库读取数据库数据.docx](https://file1.bdocx.com/fileroot1/2023-1/22/8bd25a77-1bd3-4275-b00b-1adda874eed5/8bd25a77-1bd3-4275-b00b-1adda874eed51.gif)
flash与数据库读取数据库数据
今天,天气依旧很热。
整个房间像火炉一般炽热。
今天来写写这方面的笔记,做个实验。
看看如何运作,首先来讲这方面需要准备一些资料。
就是关于数据库方面资料。
因为手上资料很少,很多事情都是需要一步步探索。
flash不能直接和数据库进行交互(除air之外),故此我们需要找一种平台搭配一些协作开发。
目前很多流行的方案是多种多样,每一个家公司用的服务器都有所不同。
据一些同事介绍,
搭配平台如下
(1):
java+flash+mysql组合开发
(2):
c+++flash+sql组合开发
(3):
php+flash+mysql组合开发
还有FMS,等等更多组合..........
flash只是用于前端显示数据和交互,大部分交互数据方面需要借助其他语言帮助
目前而言mysql已经可以满足很多开发公司,除非有特别需求动用到oracle甲骨文这样的大型数据,但无论怎样组合目的就是要实现到产品。
好,现在开始做实验了。
需要准备的材料是:
javasdktomcat,mysql等一些工具。
准备好之后,开始一步步摸索怎样交互。
我的目的是读取到数据库的数据。
当中实验当中遇到问题是
(1)怎样利用读取数据库的资料?
(2)怎样返回数据给flash接收?
(3)采用什么方式格式来交互?
(4)格式应该如何选择?
xmljson字符串?
等
(5)应该如何显示数据?
接下来,尝试实验第一种方式,也是最简单,最傻瓜的方式,我所知道的就是这样水平,所以要将这个实验带入一个开始阶段将不会掺杂更多完善的设计。
出发的过程就需要尽量简单化。
(O(∩_∩)O哈哈~)
初步意向:
flash发送数据---->服务端------->数据库
flash接收数据<-----服务器<--------数据库
要进行这样,我们需要采用包下URLLoader进行发送数据(而flex就采用Http组件或者其他远程访问)。
准备好之后,我们拥有的条件已经可以进行一个简单的发送了。
封装一个发送数据的类。
用于交互发送
创建news表
手动设计表:
设置两个项一个是id另外一个是title这样的数据项。
如图所示。
数据库名称为test,表名为news。
然后
手动为表添加一些数据入去。
测试数据库是否成功和数据库交互:
添加完数据库后,在这里会使用jsp进行测试,而这种方式比较笨拙,而且效率不高,一般不会这样使用,但是这样做好处是为了省下时间做快速设计。
而我们所在水平是如何,这些并不重要,关键是要适合我们,在方法当中寻找过程解决方案。
这些才重要。
技术水平因人而异
而其他更加优秀的做法,有一些人会严格使用框架技术,这样操作和链接数据库在效率提升不少。
下面是已经链接到数据库的测试。
viewplaincopytoclipboardprint?
<%@pagecontentType="text/html;charset=utf-8"language="java"import="java.sql.*"errorPage=""%>
<%
Connectioncon=null;
try{
Class.forName("com.mysql.jdbc.Driver");
StringdbUrl="jdbc:
mysql:
//localhost:
3306/test?
useUnicode=true&characterEncoding=utf-8";
StringdbUser="root";
StringdbPwd="123";
Stringsql="select*fromnews";
con=DriverManager.getConnection(dbUrl,dbUser,dbPwd);
out.print("已连接。
。
。
。
。
");
}
catch(Exceptionex)
{
out.print("连接失败!
!
"+ex.toString());
}
%>
<%@pagecontentType="text/html;charset=utf-8"language="java"import="java.sql.*"errorPage=""%>
<%
Connectioncon=null;
try{
Class.forName("com.mysql.jdbc.Driver");
StringdbUrl="jdbc:
mysql:
//localhost:
3306/test?
useUnicode=true&characterEncoding=utf-8";
StringdbUser="root";
StringdbPwd="123";
Stringsql="select*fromnews";
con=DriverManager.getConnection(dbUrl,dbUser,dbPwd);
out.print("已连接。
。
。
。
。
");
}
catch(Exceptionex)
{
out.print("连接失败!
!
"+ex.toString());
}
%>
数据库测试成功之后,我们需要的工作就是利用SQL语句,查询数据并输出。
jsp做法是
sql语句:
Stringsql="select*fromnews";
创建一个Statement对象,通过执行executeQuery返回。
Statementstmt=con.createStatement();
ResultSetrs=stmt.executeQuery(sql);//执行查询
查询的结果集,采用循环输出来
while(rs.next())
{
msg+=rs.getString("title")+"##";
}
out.clear();
out.print("newList="+msg);
你会看到一系列的数据出现了
viewplaincopytoclipboardprint?
<%@pagecontentType="text/html;charset=utf-8"language="java"import="java.sql.*"errorPage=""%>
<%
Connectioncon=null;
try{
Class.forName("com.mysql.jdbc.Driver");
StringdbUrl="jdbc:
mysql:
//localhost:
3306/test?
useUnicode=true&characterEncoding=utf-8";
StringdbUser="root";
StringdbPwd="123";
Stringsql="select*fromnews";
con=DriverManager.getConnection(dbUrl,dbUser,dbPwd);
out.print("已连接。
。
。
。
。
");
Statementstmt=con.createStatement();
ResultSetrs=stmt.executeQuery(sql);//执行查询
Stringmsg="";
while(rs.next())
{
msg+=rs.getString("title")+"##";
}
out.clear();
out.print("newList="+msg);
stmt.close();
con.close();
}
catch(Exceptionex)
{
out.print("连接失败!
!
"+ex.toString());
}
%>
<%@pagecontentType="text/html;charset=utf-8"language="java"import="java.sql.*"errorPage=""%>
<%
Connectioncon=null;
try{
Class.forName("com.mysql.jdbc.Driver");
StringdbUrl="jdbc:
mysql:
//localhost:
3306/test?
useUnicode=true&characterEncoding=utf-8";
StringdbUser="root";
StringdbPwd="123";
Stringsql="select*fromnews";
con=DriverManager.getConnection(dbUrl,dbUser,dbPwd);
out.print("已连接。
。
。
。
。
");
Statementstmt=con.createStatement();
ResultSetrs=stmt.executeQuery(sql);//执行查询
Stringmsg="";
while(rs.next())
{
msg+=rs.getString("title")+"##";
}
out.clear();
out.print("newList="+msg);
stmt.close();
con.close();
}
catch(Exceptionex)
{
out.print("连接失败!
!
"+ex.toString());
}
%>
输出数据:
这里是由于在数据库预先插入去了。
(方式依旧是人工和手动设计。
呵呵)
flash接收数据
接下来,我们就需要解决发送的问题?
问题是怎样发送数据到flash客户端?
发送的方式是多种多样,当中可以是名称/值的方式发送,也可以按xml,json还有其他格式发送。
这里是从数据库接收到的数据。
并显示出来的
按实验来进行一步步来制作。
封装一个类,进行发送数据
viewplaincopytoclipboardprint?
//用于与网页通信的类
packageorg.summerT
{
import.URLLoader;
import.URLRequest;
importflash.events.*;
import.URLVariables;
import.URLLoaderDataFormat;
import.*;
publicclassHttpConnectionextendsEventDispatcher
{
publicstaticconstVARIABLES:
String=URLLoaderDataFormat.VARIABLES;
publicstaticconstBINARY:
String=URLLoaderDataFormat.BINARY;
publicstaticconstTEXT:
String=URLLoaderDataFormat.TEXT;
publicfunctionHttpConnection()
{
}
/*
*para设置发送数据的
*http_url设置发送数据的方式连接地址
*typepostandget
*format格式
*/
publicfunctionsendMessage(para:
Object,http_url:
String,type:
String="post",format:
String="VARIABLES"):
void
{
varrequest:
URLRequest=newURLRequest();
request.data=para;
request.url=http_url;
switch(type)
{
case"post":
request.method=URLRequestMethod.POST;//发送的方式
break;
case"get":
request.method=URLRequestMethod.GET;//发送的方式
break;
}
//发送数据
varloader:
URLLoader=newURLLoader();
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)
{
thrownewError(e);
}
}
privatefunctioncompleteHandler(e:
Event):
void
{
//处理返回的结果,如果插入数据库成功那么就可以
varevt:
ConnectionEvent=newConnectionEvent(ConnectionEvent.COMPLETE);
evt.data=URLLoader(e.target);
this.dispatchEvent(evt);
}
privatefunctionIoHandler(e:
Event):
void
{
this.dispatchEvent(newConnectionEvent(ConnectionEvent.WRONG));
}
}
}
//用于与网页通信的类
packageorg.summerT
{
import.URLLoader;
import.URLRequest;
importflash.events.*;
import.URLVariables;
import.URLLoaderDataFormat;
import.*;
publicclassHttpConnectionextendsEventDispatcher
{
publicstaticconstVARIABLES:
String=URLLoaderDataFormat.VARIABLES;
publicstaticconstBINARY:
String=URLLoaderDataFormat.BINARY;
publicstaticconstTEXT:
String=URLLoaderDataFormat.TEXT;
publicfunctionHttpConnection()
{
}
/*
*para设置发送数据的
*http_url设置发送数据的方式连接地址
*typepostandget
*format格式
*/
publicfunctionsendMessage(para:
Object,http_url:
String,type:
String="post",format:
String="VARIABLES"):
void
{
varrequest:
URLRequest=newURLRequest();
request.data=para;
request.url=http_url;
switch(type)
{
case"post":
request.method=URLRequestMethod.POST;//发送的方式
break;
case"get":
request.method=URLRequestMethod.GET;//发送的方式
break;
}
//发送数据
varloader:
URLLoader=newURLLoader();
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)
{
thrownewError(e);
}
}
privatefunctioncompleteHandler(e:
Event):
void
{
//处理返回的结果,如果插入数据库成功那么就可以
varevt:
ConnectionEvent=newConnectionEvent(ConnectionEvent.COMPLETE);
evt.data=URLLoader(e.target);
this.dispatchEvent(evt);
}
privatefunctionIoHandler(e:
Event):
void
{
this.dispatchEvent(newConnectionEvent(ConnectionEvent.WRONG));
}
}
}
其次:
viewplaincopytoclipboardprint?
//用于通信连接的事件类
packageorg.summerT
{
importflash.events.Event;
import.*;
publicclassConnectionEventextendsEvent
{
publicstaticconstCOMPLETE:
String="complete";
publicvardata:
URLLoader;
publicstaticconstWRONG:
String="wrong";
publicfunctionConnectionEvent(type:
String,bubbles:
Boolean=false,cancelable:
Boolean=false)
{
super(type,false,false);
}
overridepublicfunctionclone():
Event
{
returnnewConnectionEvent(type,false,false);
}
}
}
//用于通信连接的事件类
packageorg.summerT
{
importflash.events.Event;
import.*;
publicclassConnectionEventextendsEvent
{
publicstaticconstCOMPLETE:
String="complete";
publicvardata:
URLLoader;
publicstaticconstWRONG:
String="wrong";
publicfunctionConnectionEvent(type:
String,bubbles:
Boolean=false,cancelable:
Boolean=false)
{
super(type,false,false);
}
overridepublicfunctionclone():
Event
{
returnnewConnectionEvent(type,false,false);
}
}
}
viewplaincopytoclipboardprint?
package
{
importflash.display.Sprite;
importflash.events.*;
import.*;
importorg.summerT.HttpConnection;
importorg.summerT.ConnectionEvent;
publicclassMainextendsSprite
{
privatevarsql:
HttpConnection;
privatevarurl:
String=ManagerURL.Address()+"index.jsp";
publicfunctionMain()
{
init();
}
privatefunctioninit():
void
{
sql=newHttpConnection();
varobj:
URLVariables=newURLVariables();
sql.sendMessage(obj,url);
sql.addEventListener(ConnectionEvent.COMPLETE,onComplete);
}
privatefunctiononComplete(event:
ConnectionEvent):
void
{
varsqldata:
*=event.data;
varmsg:
String=sqldata.data.newList.toString();
varlist: