构建动态 WAP 站点 (3) - 数据库的输出

发布时间:2007年06月04日      浏览次数:1541 次
Chapter 3 数据库的输出
  在我们的这个例子中,由于每支股票有价格,名字,号码等信息,所以要由一个数据库来保存维护。我们的主要功能有查询某股票的当前价位,五天来的收盘价,今天的涨降幅前五名,所以,数据库中除了每支股票的号码和名字外,还得有前四天来的收盘价及当前价格。考虑到值试举个例子而已,所以只设计了一个简单的数据库,名为money ,该数据库设计了一张表,名为stock,该表包含了以下属性:num(主键) , name , price1 , price2 , price3 , price4 , price5 , temp 。 分别表示股票号码,名字,前四天收盘价,前三天收盘价,前天收盘价,昨天收盘价,现在价格,现在相对于昨天的涨降幅(百分比)。我们输入了大约50支股票的信息。
  根据查询的需要,需从数据库中找到相关的数据,我们采用ASP编程,用ODBC连接数据库money,设置的数据源名为money。下面以查询当前价格为例,说明怎样与数据库连接。
<%
 number=Request.QueryString("id")
 Set conn=Server.CreateObject("adodb.connection")
 conn.Open"dsn=money;uid=;pwd=;database=money.mdb"
 sql0="select num,name,price5 from stock where num='"&number&"'"
 Set rs0=Server.CreateObject("adodb.recordset") 
 rs0.Open sql0,conn  
%>
  上面的这段ASP代码相信大家都应该看懂了吧,这是一段查询代号为id的股票的纪录的代码。
  考虑到返回给客户的WAP页面必须是当时的股票信息,所以我们必须通过后台程序读取当时的数据库中的数据,即时生成WAP页面(WML页面)返回给WAP客户。由于IIS本身支持ASP,而且ASP开发周期较小,所以采用ASP作为后台语言,生成WML页面,通过向客户端发送 WML的HTTP头实现向客户端传送WML页面。如下列程序所示:
<% Response.ContentType="text/vnd.wap.wml" %><?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" http://www.wapforum.org/DTD/wml_1.1.xml >
<wml>
<card>
…………
</card>
</wml>
  注意:<% Response.ContentType="text/vnd.wap.wml" %>和<?xml version="1.0"?>之间不能有空格或空行。
  由于 Nokia Toolkit 不支持中文,所以,所有的汉字都只能做字符的实体引用,因此,用ASP编写了一个c2u的函数,进行汉字和字符实体之间的转换,程序如下:
<%
Function c2u(text)
  For i=1 to Len(text)
  c=Mid(text,i,1)
  c2u=c2u&"&#x" & Hex(AscW(c)) & ";"
  Next
 End Function
%>
  要在WML中输出汉字的时候,只需 <%=c2u("中文字符")%> 即可。
  在WML中,采用不同card间的跳转来实现功能选择的步骤。采用<postfield/>标记给ASP页面传递客户端的选择信息。在ASP程序中,使用 Request.QueryString("")来获得客户端传递来的信息。
  下面就是完整的一个显示页面的例子:
<%@ LANGUAGE="VBScript" %>
<%
dim j
j=0
%>
<%
Function c2u(text)
  For i=1 to Len(text)
  c=Mid(text,i,1)
  c2u=c2u&"&#x" & Hex(AscW(c)) & ";"
  next
 End Function
%>
<%
 set conn=server.createobject("adodb.connection")
 conn.open"dsn=money;uid=;pwd=;database=money.mdb"
 sql0="update stock set temp=(price5-price4)/price4*100"
 set rs0=server.createobject("adodb.recordset") 
 rs0.open sql0,conn
 sql="select num,name,temp from stock where temp<0 order by temp ASC"
 set rs=server.createobject("adodb.recordset") 
 rs.open sql,conn 
%>
<% Response.ContentType="text/vnd.wap.wml" %><?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml"><wml>
<card id="ShowCurrent">
<p>
  <%=c2u("跌幅前五名:")%><br/>
<%
while j<5 and not rs.eof
%>
  <%=rs(0).Value%>-<%=c2u(rs(1).Value)%> <%=rs(2).Value%>%
<br/>
<%
rs.movenext
j=j+1
wend
%>
</p>
<do type="accept" label="<%=c2u("返回")%>">
 <go href="index.asp#Welcome"/>
</do>
<p align="center">
(c) 501 Studio, 2001<br/>
All rights reserved !
</p>
</card>
</wml> 
<%
rs.close
%>
  到这里,相信大家对实现动态WAP站点应该都有了一个初步的了解了吧。如果对内容有什么疑问,可以和我联系。lonelyp@etang.com
免责声明:本站相关技术文章信息部分来自网络,目的主要是传播更多信息,如果您认为本站的某些信息侵犯了您的版权,请与我们联系,我们会即时妥善的处理,谢谢合作!