Web数据库开发工具(上)
Web技术与数据库技术相结合彻底改变了传统的以专用客户程序访问数据库的方式,使热 们通过统一的浏览器便可以访问不同的数据库。这种由“浏览器-Web服务器-数据库服务器”组成的三层结构较之于由“客户程序-数据库”组成的两层结构在跨平台和网络互联方面具有明显的优势。 面对这个有着巨大潜力的市场,各软件厂商都争先推出自己的Web和数据库互联产品。本文哪舛?ybase公司推出的Web.sql作一简单介绍,以便广大读者能对这种数据库访问方式有所了解。
一、Web.sql简介
Web.sql是Sybase客户机/服务器体系结构中针对Internet应用而推出的中间件产品,用用于实现Web服务器互联数据库。通过Web.sql,用户可以在HTML页面中插入SQL数据库命令和Pe l脚本。当客户浏览器请求这些页面时,Web.sql运行这些脚本并将输出结果动态地生成页面 送给浏览器。
Web.sql提供了CGI和NSAPI(Netscape Server Application Programming Interface) 个版本。CGI版本以CGI程序方式运行,Web服务器在每次接收到一个对HTS(HyperText Syb se)文件的请求时调用该程序,由该程序对HTS中的命令进行处理。在NSAPI版本中,Web.sq 程序直接连接到Netscape的Web服务器。与CGI版本相比,它减少了对每个HTS请求启动Web.s l进程的额外开销,并能缓存数据库连接,从而具有更高的性能。
二、HTS文件
数据库操作命令和Perl脚本被保存在特定的HTS文件中,Web.sql程序能读入这些文件, 理其中的命令,然后将输出结果按HTML格式传送给浏览器。Web.sql程序通过一个数据库存 映像决定每个HTS文件使用的数据库、用户名和口令。
HTS文件是标准HTML文件的一种扩展,它包含所有HTML可用标记和HTML扩展,如Java或L veScript标记。Web.sql程序忽略这些标记并将它们原封不动地传送给HTTP服务器。
同时,HTS文件为Web.sql的附加功能提供了一个新标记<SYB>。在标记<SYB>和</SYB>之 的语句为SQL语句或Perl代码,它们运行时的输出信息将被自动插入到HTML语句流中并传递 ?TTP服务器。
<SYB>标记有一个可选属性TYPE。若“TYPE=SQL”则表明<SYB>块包含的是SQL语句;若?TYPE=PERL”则表明是Perl语句(Perl语句中可能包含执行SQL语句的功能调用。)。如果不 该?YPE属性,则Web.sql处理器默认<SYB>块中包含的是Perl语句。
下例显示了如何在HTS文件中包含一条简单的select语句:
<SYB TYPE=SQL>
select * from employee
</SYB>
在该例中,当客户浏览器请求包含以上代码的HTS文件时,Web.sql程序执行该select语 ,并将输出信息以HTML格式代替<SYB>块插入HTML语句流并传递给HTTP服务器。而产生输出 母?elect语句对客户浏览器完全是透明的。
一个<SYB>块中可以包含多条SQL语句,一个HTS文件可以包含多个Perl<SYB>块和SQL<SY >块。但不能在同一个<SYB>块中既包含SQL语句又包含Perl语句(在SQL语句中使用Perl变量 那 况例外)。
三、连接数据库
Web.sql维护一个数据库访问映像表,用于将HTS文件中的访问映射到不同的数据库连接 。用户通过连接句柄对数据库进行操作,默认数据库连接的句柄保存在Perl变量$ws_db中?也可以通过Web.sql例程ws_connect建立其他连接,但必须是在Web.sql配置文件Websql.pl?义的映像表中指定的合法连接。使用ws_connect建立连接后将返回一个连接句柄,用户可以 该句柄赋给变量$ws_db,从而改变HTS文件使用的默认数据库连接。由于ws_connect是Web. ql的Perl API的一部分,所以必须在Perl<SYB>块中使用。确定数据库连接后,可通过在一?单独的SQL<SYB>块中使用use语句来选择操作的数据库。
假设,“db_conn1”是映像表中定义的默认数据库连接名,“db_conn2”是非默认的合 数据库连接名,则下例中SQL语句使用的是“db_conn2”连接而不是默认连接“db_conn1”
<SYB TYPE=PERL>
$ws_db = ws_connect ( "db_conn2" );
</SYB>
<SYB TYPE=SQL>
use compdb
</SYB>
<SYB TYPE=SQL>
select * from employee
</SYB>
四、数据库操作
在HTS文件中可以使用SQL语句来实现对数据库的各种操作,如查询、插入、更新、删除 建表和执行存储过程等。下面是插入和更新的实例:
<SYB TYPE=SQL>
insert into compdb.employee
values ("11008","张三","男","1970/7/21","项目经理","开发部")
</SYB>
<SYB TYPE=SQL>
update compdb..employee
set dept="技术支持部"
where empno="11008"
</SYB>
五、引用浏览器中的输入项
SQL语句除了如上例中所示引用固定字串外,还可通过Web.sql支持的Perl变量引用用户 入的信息。Web.sql允许在Perl<SYB>块中定义变量,而在整个文件中全局使用。在HTS文件 校?eb.sql将所有以$符为前缀的串解释为一个全局Perl变量,即使该串出现在Perl <SYB>?以外也是这样。表1中描述了从HTML和SQL<SYB>块访问Perl变量的格式。
格式
意义
$vari或${vari}
名为vari的纯量变量。
$array[2]
数组array的第三项(数组从0开始)。
$assoc{"vari"}
关联数组assoc中名为vari的纯量变量。
Web.sql能自动分析传递给HTS文件的HTML表单数据,然后赋给相应的Perl变量。你可以 ?QL语句中使用这些变量。
格式
意义
$vari或${vari}
名为vari的表单输入项(当只有一个表单输入项具有该名时)。
@vari
名为vari的一组表单输入项(当有多个表单输入项具有该名时)。
%ws_form
所有表单输入项及其值的关联数组。
$ws_form{"vari"}
名为vari的表单输入项的值。当多个输入项具有相同名字时,该值为空格分开的所有值叠加。
$ws_multiple{"vari"}
取1表示有多个名为vari的输入项,否则为0。
%ws_multiple
指示具有相同名字的多个表单输入项的关联数组。如果$ws_multiple{"vari"}为真则@v ri被定义,并且$ws_form{"vari"}包含所有名为"vari"的输入项用空格分开的值的组合。否则vari被定义并且"vari"是一个单值表单输入项。