?? 你會web數據庫的開發嗎.txt
字號:
你會web數據庫的開發嗎?
--------------------------------------------------------------------------------
第八軍團 時間:2003-11-25 10:59:59
毫無疑問,當今Web程序設計中最吸引人而且最復雜的當然就是web數據庫程序了。平心而論,其復雜高深的程序決不是你們可以想象的到的。我們先來看看其中涉及到的幾個方面的問題:
1.最基本的html設計
2.CGI程序編寫調試
3.網絡管理和客戶協調
4.數據庫編寫
5.客戶/服務體系程序編寫
另外你還得不時地同你的客戶進行斗爭,以取得他們對你工作的認同。因此編寫一個大型WEB數據庫,是綜合素質的考驗。
筆者自問尚不完全具備以上的能力,但有幸曾參加過幾個web數據庫的開發,算是具備了初步的經驗吧。這里給大家分享,也算是感謝各位對這個斷斷續續的教程的總結吧。
一 數據庫選擇
從一般情況來看,使用web數據庫往往是要解決數據的歸納、索引和維護的問題。我們一般選擇最流行的關系型數據庫,比如NT下的sql,win95和nt下的Access,NT下的sybase,unix下的msql等等。當然還有Oracle、FileMaker PRO、Paradox等等。這些都是很流行的Sql數據庫。Sql給數據管理提供了一個標準而堅實的接口,它對數據庫操作餓所有函數必需在數據庫語言中實現。這種函數包括:數據對象的創建、插入數據和數據修改等。對于數據量不大的小型數據庫,一般使用access。
二 接口程序
雖然我們可以直接編寫WEB的CGI接口,但是那是工作量巨大且麻煩異常的工作。為了減輕開發者的負擔,數據庫程序員為我們編寫了許多可以直接使用的接口程序,配合不同的數據庫。下面就是一些十分常用的接口程序:
1. DB2WWW
http://www.software.ibm.com/data/db2/db2wfac2.html
這是一個用于和IBM DB2數據庫進行連接的工具。在HTTP服務器中,這種工具將HTML文件和SQL命令作為宏文件存儲,然后,DB2WWW在接受到瀏覽器請求后就處理這些宏文件。
2. dbCGI
http://www.progress.com/webtools.html
這個工具通過在html文件中內置SQL語句來實現和數據庫的連接。適用于Progress,Sybase,Oracle,Informix,Ingres和ODBC。下面是一個典型的dbCGI程序代碼:
<title>dbCGI test</title>
<sql init>
INFORMIXDIR=/usr/informixdir
SQLEXEC=/usr/informix/sqlturbo
TBCONFIG=tbconfig
</sql>
<sql connect connl>
<DATABASE=stores>
<sql>
<sql format>
% [! 8:<h1>%8d</h1>%]
....
</sql>
<sql query connl>
selet *
from customer
order by date,city,zipcode
</sql>
<sql disconect connl>
</sql>
<sql uninit>
</sql>
這個工具通過<sql>標簽和%轉意字符來把sql語句放置在html語句內。
3 Genera
http://gdbdoc.gdb.org/letovsky/genera/general.html
這個是sybase數據庫系統的網關。它通過在文本文件中加入特定的語句來和數據庫進行連接。
4 WebDBC
http://www.ndev.com/
以windows NT為平臺,可以訪問所有對odbc兼容的數據庫。
5 A-Xorion
http://www.clark.net/infouser/endidc.html
他是一個CGI網關,它可以訪問大多數的PC機數據庫。它以Windows3.1/95/NT為平臺。數據庫為Ms Access2.0。
三 編程語言
上面介紹的是一些常用的接口程序,它們需要Server的配合才能正常工作。當然如果是很小的數據庫程序,不需要使用如此復雜的數據庫接口程序。用C,Perl,VB等等,寫成CGI程序,在CGI程序內調用數據庫。雖然速度方面不是很快,但絕對是非常簡單的。
最后的例子:
最后,我準備以一個例子來結束這個教程。
環境:
這是一個非常簡單的WEB應用程序。如果你要運行這個程序,也許你得化些時間來配置自己的系統。在這個例子里,CGI程序由Perl5來編寫,后臺數據庫使用sybase system 10,Sybperl用于建立腳本和數據庫之間的通信,用其他的CGI后臺數據庫接口程序也可以。
CGI程序:
<head>
<title>會議登記程序</title>
</head>
<body>
<h2>會議登記系統</h2>
please fill out the following form. A registration packet will be sent to you immediatel you.Note that all <b>bolad-faced</b>fields muse be complected.
<hr>
<form method="post" action="cgi-bin/resgister.pl">
<b>first name:</b><input type="text" name="c_fname" size=30>
<p>
<b>Last name:</b><input type="text" name="c_lname" size=30>
<p>
<b>address 1:</b><input type="text" name="c_add1" size=30>
<p>
<b>address 2:</b><input type="text" name="c_add2" size=30>
<p>
<b>city:</b><input type="text" name="c_city" size=30>
<p>
<b>State:</b><input type="text" name="c_state" size=2>
<p>
<b>Zip:</b><input type="text" name="c_zip" size=15>
<p>
<b>phone:</b><input type="text" name="c_phone" size=15>
<p>
<b>Fax:</b><input type="text" name="c_fax" size=15>
<p>
<b>Email:</b><input type="text" name="c_email" size=15>
<p>
Packge:
<ul>
<li><input type="radio" name="c_packge" valuge="a">Package A
<li><input type="radio" name="c_packge" valuge="b">Package B
<li><input type="radio" name="c_packge" valuge="c">Package C
</ul>
How did you hear about the conference:
<ul>
<li><input type="radio" name="c_ad" value="a">Direct Mail
<li><input type="radio" name="c_ad" value="b">Associate
<li><input type="radio" name="c_ad" value="c">Journal
<li><input type="radio" name="c_ad" value="d">Other
</ul>
<p>
<input type="reset" value="clear"><input type="submit" value="Register"><p>
</form>
<hr>
</body>
Perl腳本:
#!/usr/local/bin/perl
require"cgi-lib.pl";
&ReadParse(* input);
$mc_fname=$input{'c_fname'};
$mc_lname=$input{'c_lname'};
$mc_add1=$input{'c_add1'};
$mc_add2=$input{'c_add2'};
$mc_city=$input{'c_city'};
$mc_state=$input{'c_state'};
$mc_zip=$input{'c_zip'};
$mc_phone=$input{'c_phone'};
$mc_fax=$input{'c_fax'};
$mc_email=$input{'c_email'};
$mc_package=$input{'c_package'};
$mc_ad=$input{'c_ad'};
print &PrintHeader;
if (($mc_fname eq"")||(mc_lname eq "")||(mc_add1 eq "")||($mc_add2 eq "")||(
mc_city eq "")||(mc_state eq "")||(mc_zip eq "")){
printf ("<br>");
printf(",strong>Your registration cannot be processed as is.Pleae make sure all the requied fields are filled properly.</strong>");
print"<p>";
print"Pleae use the <i>Back</i>button to complete the form.\n";
}
else{# data is OK
use Sybase::DBlib;
$dbh=Sybase::DBlib->dblogin('conf_user','123','DB-SERVER','REG');
$dbh->dbuse('conference');
$sqlcmd="insert into reg(c_fname,c_lanme,c_add1,c_add2,c_city,c_state,c_zip, c_phone,c_fax,c_email,c_package,c_ad)";
$sqlcmd=$sqlcmd."values("
$sqlcmd=$sqlcmd.'\"".$mc_fname."\",";
$sqlcmd=$sqlcmd.'\"".$mc_flame."\",";
$sqlcmd=$sqlcmd.'\"".$mc_add1."\",";
$sqlcmd=$sqlcmd.'\"".$mc_add2."\",";
$sqlcmd=$sqlcmd.'\"".$mc_city."\",";
$sqlcmd=$sqlcmd.'\"".$mc_state."\",";
$sqlcmd=$sqlcmd.'\"".$mc_zip."\",";
$sqlcmd=$sqlcmd.'\"".$mc_phone."\",";
$sqlcmd=$sqlcmd.'\"".$mc_fax."\",";
$sqlcmd=$sqlcmd.'\"".$mc_email."\",";
$sqlcmd=$sqlcmd.'\"".$mc_package."\",";
$sqlcmd=$sqlcmd.'\"".$mc_ad."\",";
$sqlcmd=$sqlcmd.'\"".$mc_fax."\",";
$dbh->dbcmd($sqlcmd."\n");
$dbh->dbsqlexec;
print"<strong>Thank you.</strong>Your registration has been submitted.You should receive you packet shourtly in the mail.";
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -