數(shù)據(jù)庫(kù)接口技術(shù)ODBC_第1頁(yè)
數(shù)據(jù)庫(kù)接口技術(shù)ODBC_第2頁(yè)
數(shù)據(jù)庫(kù)接口技術(shù)ODBC_第3頁(yè)
數(shù)據(jù)庫(kù)接口技術(shù)ODBC_第4頁(yè)
數(shù)據(jù)庫(kù)接口技術(shù)ODBC_第5頁(yè)
已閱讀5頁(yè),還剩94頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

數(shù)據(jù)庫(kù)接口技術(shù)——ODBCPKU數(shù)據(jù)庫(kù)接口技術(shù)的分類微軟最新的數(shù)據(jù)訪問(wèn)技術(shù),用以實(shí)現(xiàn)訪問(wèn)關(guān)系或非關(guān)系數(shù)據(jù)庫(kù)中的數(shù)據(jù)。

ADOMicrosoft推出的最早的整合異質(zhì)數(shù)據(jù)庫(kù)的數(shù)據(jù)庫(kù)接口,現(xiàn)在已成為一種事實(shí)上的標(biāo)準(zhǔn)。ODBC是執(zhí)行SQL語(yǔ)句的JavaAPI,由一組用Java語(yǔ)言編寫的類與接口組成。JDBCPKUODBCODBC: OpenDataBaseConnectivity 開放式數(shù)據(jù)庫(kù)聯(lián)接

Microsoft引進(jìn)這種技術(shù)的一個(gè)主要目的是,以非語(yǔ)言專用的方式,提供給程序員一種訪問(wèn)數(shù)據(jù)庫(kù)內(nèi)容的簡(jiǎn)單方法。PKUODBC的產(chǎn)生背景關(guān)系型數(shù)據(jù)庫(kù)產(chǎn)生后很快就成為數(shù)據(jù)庫(kù)系統(tǒng)的主流產(chǎn)品,由于每個(gè)DBMS廠商都有自己的一套標(biāo)準(zhǔn),人們很早就產(chǎn)生了標(biāo)準(zhǔn)化的想法,于是產(chǎn)生了SQL,由于其語(yǔ)法規(guī)范逐漸為人所接受,成為RDBMS上的主導(dǎo)語(yǔ)言。最初,各數(shù)據(jù)庫(kù)廠商為了解決互連的問(wèn)題,往往提供嵌入式SQL

API,用戶在客戶機(jī)端要操作系統(tǒng)中的RDBMS時(shí),往往要在程序中嵌入SQL語(yǔ)句進(jìn)行預(yù)編譯。由于不同廠商在數(shù)據(jù)格式、數(shù)據(jù)操作、具體實(shí)現(xiàn)甚至語(yǔ)法方面都具有不同程度的差異,所以彼此不能兼容。PKUODBC的產(chǎn)生1991年11月,微軟宣布了ODBC,次年推出可用版本。1992年2月,推出了ODBC

SDK

2.0版。ODBC基于SAG的SQL

CAE草案所規(guī)定的語(yǔ)法,共分為Core、Level

1、

Level

2三種定義,分別規(guī)范了22、16、13共51條命令,其中29條命令甚至超越了SAG

CLI中原有的定義,功能強(qiáng)大而靈活。它還包括標(biāo)準(zhǔn)的錯(cuò)誤代碼集、標(biāo)準(zhǔn)的連接和登錄DBMS方法、標(biāo)準(zhǔn)的數(shù)據(jù)類型表示等。PKUODBC的發(fā)展由于當(dāng)時(shí)ODBC思想上的先進(jìn)性,且沒(méi)有同類的標(biāo)準(zhǔn)或產(chǎn)品與之競(jìng)爭(zhēng),它一枝獨(dú)秀,推出后僅僅兩三年就受到了眾多廠家與用戶的青睞,成為一種廣為接受的標(biāo)準(zhǔn)。目前,已經(jīng)有130多家獨(dú)立廠商宣布了對(duì)ODBC的支持,常見的DBMS都提供了ODBC的驅(qū)動(dòng)接口,這些廠商包括Oracle、Sybase、Informix、Ingres、IBM(DB/2)、DEC(RDB)、HP(ALLBASE/SQL)、Gupta、Borland(Paradox)等。目前,ODBC已經(jīng)成為客戶機(jī)/服務(wù)器系統(tǒng)中的一個(gè)重要支持技術(shù)。

PKUODBC的基本思想為用戶提供簡(jiǎn)單、標(biāo)準(zhǔn)、透明的數(shù)據(jù)庫(kù)連接的公共編程接口。ODBC基本思想開發(fā)廠商根據(jù)ODBC的標(biāo)準(zhǔn)去實(shí)現(xiàn)底層的驅(qū)動(dòng)程序。PKUODBC與傳統(tǒng)方式的比較傳統(tǒng)方式ODBCPKUODBC的特點(diǎn)1使用戶程序有很高的互操作性,相同的目標(biāo)代碼適用于不同的DBMS2由于ODBC的開放性,它為程序集成提供了便利,為客戶機(jī)/服務(wù)器結(jié)構(gòu)提供了技術(shù)支持3由于應(yīng)用與底層網(wǎng)絡(luò)環(huán)境和DBMS分開,簡(jiǎn)化了開發(fā)維護(hù)上的困難PKUODBC的體系結(jié)構(gòu)和實(shí)現(xiàn)ODBC是依靠分層結(jié)構(gòu)來(lái)實(shí)現(xiàn)的具體分為四層:應(yīng)用程序驅(qū)動(dòng)程序管理器驅(qū)動(dòng)程序數(shù)據(jù)源PKU體系結(jié)構(gòu)應(yīng)用程序驅(qū)動(dòng)程序管理器驅(qū)動(dòng)程序數(shù)據(jù)源ApplicationDrivemanagerDriveDatasoursePKU應(yīng)用程序?qū)邮褂肙DBC接口的應(yīng)用程序可執(zhí)行以下任務(wù):

請(qǐng)求與數(shù)據(jù)源的連接和會(huì)話(SQLConnect)向數(shù)據(jù)源發(fā)送SQL請(qǐng)求(SQLExecDirct或SQLExecute)對(duì)SQL請(qǐng)求的結(jié)果定義存儲(chǔ)區(qū)和數(shù)據(jù)格式請(qǐng)求結(jié)果處理錯(cuò)誤如果需要,把結(jié)果返回給用戶對(duì)事務(wù)進(jìn)行控制,請(qǐng)求執(zhí)行或回退操作(SQLTransact)終止對(duì)數(shù)據(jù)源的連接(SQLDisconnect)。PKU驅(qū)動(dòng)程序管理程序功能為ODBC提供提供參數(shù)和次數(shù)驗(yàn)證為每一個(gè)驅(qū)動(dòng)程序提供ODBC函數(shù)入口地點(diǎn)處理幾個(gè)ODBC的初始化調(diào)用PKU驅(qū)動(dòng)程序功能建立與數(shù)據(jù)源的連接向數(shù)據(jù)源提交請(qǐng)求在應(yīng)用程序需求時(shí),轉(zhuǎn)換數(shù)據(jù)格式返回結(jié)果給應(yīng)用程序?qū)⑦\(yùn)行錯(cuò)誤格式化為標(biāo)準(zhǔn)代碼返回在需要時(shí)說(shuō)明和處理光標(biāo)。

PKU數(shù)據(jù)源的組成數(shù)據(jù)源網(wǎng)絡(luò)環(huán)境DBMS數(shù)據(jù)操作系統(tǒng)PKUODBC的接口函數(shù)I.

連接數(shù)據(jù)源(ConnectingtoaDataSource)SQLAllocEnvSQLAllocConnectSQLConnectSQLPriverConnectSQLBrowseConnectII.

取得驅(qū)動(dòng)程序及數(shù)據(jù)源的相關(guān)訊息SQLDataSourceSQLGetInfoSQLGetFunctionsSQLGetTypeInfo.III.

設(shè)定及取得驅(qū)動(dòng)程序的選項(xiàng)SQLSetConnectOptionSQLGetConnectOptionSQLSetStmtOptionSQLGetStmtOption.PKUODBC的接口函數(shù)IV.

準(zhǔn)備SOL指令之需求SQLAllocStmtSQLPrepareSQLSetParamSQLParamOptionsSQLGetCursorNameSQLSetCursorNameSQLSetScrollOptions.V.

傳送及執(zhí)行需求SQLExecuteSQLExecDirectSQLNativeSqlSQLDescribeParanlSQLNumParamsSQLParamDataSQLPutData.PKUODBC的接口函數(shù)VI.

取得執(zhí)行結(jié)果及有關(guān)結(jié)果的訊息SQLRowCountSQLNumResultColsSQLDescribeColSQLColAttributesSQLBindColSQLFetchSQLExtendedFetchSQLGetDataSQLSetDosSQLMoreResultsSQLErrorVII.

取得有關(guān)數(shù)據(jù)源系統(tǒng)表(SystemtablesorCatalog)的訊息SQLColumnPrivilegesSQLColumnsSQLForeignkeysSQLPrimaryKeysSQLProcedureColumnsSQLProceduresSQLSpecialColumnsSQLStatisticsSQLTablePrivilegesSQLTablesPKUODBC的接口函數(shù)VIII.

結(jié)束SQL指令需求SQLFreeStmtSQLCancelSQLTransactIX.

結(jié)束與數(shù)據(jù)源的連接SQLDisconnectSQLFreeConnectSQLFreeEnvPKUODBC程序流程為ODBC分配環(huán)境句柄分配一個(gè)連接句柄連接到數(shù)據(jù)庫(kù)用SQL命令分配一個(gè)語(yǔ)句句柄傳送該命令關(guān)閉連接解除連接和環(huán)境句柄PKUODBC實(shí)例應(yīng)用程序要訪問(wèn)一個(gè)數(shù)據(jù)庫(kù),首先必須用ODBC管理器注冊(cè)一個(gè)數(shù)據(jù)源,管理器根據(jù)數(shù)據(jù)源提供的數(shù)據(jù)庫(kù)位置、數(shù)據(jù)庫(kù)類型及ODBC驅(qū)動(dòng)程序等信息,建立起ODBC與具體數(shù)據(jù)庫(kù)的聯(lián)系。這樣,只要應(yīng)用程序?qū)?shù)據(jù)源名提供給ODBC,ODBC就能建立起與相應(yīng)數(shù)據(jù)庫(kù)的連接。在ODBC中,ODBCAPI不能直接訪問(wèn)數(shù)據(jù)庫(kù),必須通過(guò)驅(qū)動(dòng)程序管理器與數(shù)據(jù)庫(kù)交換信息。驅(qū)動(dòng)程序管理器負(fù)責(zé)將應(yīng)用程序?qū)DBCAPI的調(diào)用傳遞給正確的驅(qū)動(dòng)程序,而驅(qū)動(dòng)程序在執(zhí)行完相應(yīng)的操作后,將結(jié)果通過(guò)驅(qū)動(dòng)程序管理器返回給應(yīng)用程序。PKUODBC實(shí)例(續(xù)1)實(shí)現(xiàn)步驟:1.設(shè)置ODBC數(shù)據(jù)源步驟是控制面板->管理工具->數(shù)據(jù)源(ODBC)。這里將加入一個(gè)本用戶的數(shù)據(jù)源local,連接到本地的SQLServer2000服務(wù)器上。選擇添加數(shù)據(jù)源,選擇SQLServer的驅(qū)動(dòng)。完成相關(guān)的設(shè)置之后就可以看到本地的DSN中多了一個(gè)名為local的數(shù)據(jù)源。如圖所示:PKUODBC實(shí)例(續(xù)2)設(shè)置完之后就可以在程序中使用ODBC的API來(lái)連接到數(shù)據(jù)庫(kù)了。

PKUODBC實(shí)例(續(xù)3)2.連接到ODBC數(shù)據(jù)源下面通過(guò)一個(gè)簡(jiǎn)單的基于控制臺(tái)的VC程序來(lái)演示如何連接到ODBC數(shù)據(jù)源。要連接到ODBC數(shù)據(jù)源,需要先分配環(huán)境句柄,設(shè)置環(huán)境句柄,分配連接句柄,然后用這些句柄連接到ODBC建立連接。這部分的代碼如下:SQLHENVhEnv;SQLHDBChConnect;SQLRETURNr;//分配環(huán)境句柄r=SQLAllocHandle(SQL_HANDLE_ENV,SQL_NULL_HANDLE,&hEnv);if(r!=SQL_SUCCESS){cout<<"SQLAllocHandleerror!"<<endl;exit(1);}PKUODBC實(shí)例(續(xù)4)//設(shè)置環(huán)境句柄r=SQLSetEnvAttr(hEnv,SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_ODBC3,0);if(r!=SQL_SUCCESS){cout<<"SQLSetEnvAttrerror!"<<endl;exit(1);}//分配連接句柄r=SQLAllocHandle(SQL_HANDLE_DBC,hEnv,&hConnect);if(r!=SQL_SUCCESS){cout<<"SQLAllocHandleerror!"<<endl;exit(1);}//連接ODBC數(shù)據(jù)庫(kù)r=SQLConnect(hConnect,(SQLCHAR*)"local",SQL_NTS,(SQLCHAR*)"zhdf",SQL_NTS,(SQLCHAR*)"123456",SQL_NTS);if(r!=SQL_SUCCESS&&r!=SQL_SUCCESS_WITH_INFO){cout<<"SQLConnecterror!"<<endl;exit(1);}PKUODBC實(shí)例(續(xù)5)3.查詢實(shí)現(xiàn)在建立ODBC的時(shí)候我選擇的默認(rèn)數(shù)據(jù)庫(kù)是pubs。在這里用代碼查詢一下authors:charSQLString[100];SQLCHARRetName[20];SQLLENcbName;//分配語(yǔ)句句柄r=SQLAllocHandle(SQL_HANDLE_STMT,hConnect,&hStmt);if(r!=SQL_SUCCESS){cout<<"SQLAllocHandleerror!"<<endl;exit(1);}//執(zhí)行SQL查詢strcpy(SQLString,"selectau_lnamefromauthors");r=SQLExecDirect(hStmt,(SQLCHAR*)SQLString,strlen(SQLString));if(r!=SQL_SUCCESS){cout<<"SQLExecDirecterror!"<<endl;exit(1);}PKUODBC實(shí)例(續(xù)6)//綁定數(shù)據(jù)并輸出r=SQLBindCol(hStmt,1,SQL_C_CHAR,(SQLPOINTER)RetName,20,&cbName);while(1){r=SQLFetch(hStmt);if(r==SQL_ERROR||r==SQL_SUCCESS_WITH_INFO){cout<<"SQLFetcherror!"<<endl;exit(1);}if(r==SQL_SUCCESS||r==SQL_SUCCESS_WITH_INFO){cout<<RetName<<endl;}elsebreak;}PKUODBC實(shí)例(續(xù)7)執(zhí)行結(jié)果數(shù)據(jù)庫(kù)接口技術(shù)——JDBCPKUJDBC簡(jiǎn)介JDBC概述JDBC技術(shù)特點(diǎn)JDBC編程框架實(shí)例介紹PKUJDBC概述JDBC的誕生SUN公司開發(fā)的一個(gè)以Java語(yǔ)言為接口的數(shù)據(jù)庫(kù)應(yīng)用程序開發(fā)的接口。

在JDK1.x版本中,JDBC只是一個(gè)可選部件,到了JDK1.1公布時(shí),SQL類包(也就是JDBCAPI)就成Java語(yǔ)言的標(biāo)準(zhǔn)部件。在JDBC2.0中,JDBC中的一系列可選的擴(kuò)展對(duì)連接過(guò)程進(jìn)行了改進(jìn)。JDBC重要性JDBC擴(kuò)展了Java的能力。隨著越來(lái)越多的程序開發(fā)人員使用Java語(yǔ)言,對(duì)Java訪問(wèn)數(shù)據(jù)庫(kù)易操作性的需求越來(lái)越強(qiáng)烈。PKUJDBC概述JDBC和ODBC及其他API的比較正如Java被設(shè)計(jì)成與硬件平臺(tái)無(wú)關(guān)那樣,JDBC也被設(shè)計(jì)成向開發(fā)者提供某種程度的數(shù)據(jù)庫(kù)無(wú)關(guān)性。ODBC并不適合在Java中直接使用。ODBC是一個(gè)C語(yǔ)言實(shí)現(xiàn)的API,從Java程序調(diào)用本地的C程序會(huì)帶來(lái)一系列類似安全性、完整性、健壯性的缺點(diǎn)。完全精確地實(shí)現(xiàn)從C代碼ODBC到JavaAPI寫的ODBC的翻譯也并不令人滿意。JDBC這樣的JavaAPI對(duì)于純Java方案來(lái)說(shuō)是必須的。PKUJDBC技術(shù)特點(diǎn)JDBC是一種用于執(zhí)行SQL語(yǔ)句的JavaAPI,它由一組用Java編程語(yǔ)言編寫的類和接口組成,可以使用它來(lái)訪問(wèn)數(shù)據(jù)庫(kù)和執(zhí)行SQL語(yǔ)句。JDBC為工具/數(shù)據(jù)庫(kù)開發(fā)人員提供了一個(gè)標(biāo)準(zhǔn)的API,使他們能夠用純JavaAPI來(lái)編寫數(shù)據(jù)庫(kù)應(yīng)用程序。JDBC對(duì)Java程序員而言是API,對(duì)實(shí)現(xiàn)與數(shù)據(jù)庫(kù)連接的服務(wù)提供商而言是接口模型。作為API,JDBC為程序開發(fā)提供標(biāo)準(zhǔn)的接口,并為數(shù)據(jù)庫(kù)廠商及第三方中間件廠商實(shí)現(xiàn)與數(shù)據(jù)庫(kù)的連接提供了標(biāo)準(zhǔn)方法。PKUJDBC技術(shù)特點(diǎn)JDBC的結(jié)構(gòu)PKUJDBC技術(shù)特點(diǎn)JDBC規(guī)范提供了數(shù)據(jù)庫(kù)廠商必須實(shí)現(xiàn)的接口集合。目前有四種不同類型的實(shí)現(xiàn)。PKUJDBC編程框架JDBC能完成下列三件事:同一個(gè)數(shù)據(jù)庫(kù)建立連接;向數(shù)據(jù)庫(kù)發(fā)送SQL語(yǔ)句;處理數(shù)據(jù)庫(kù)返回的結(jié)果。JDBC的接口一個(gè)是面向程序開發(fā)人員的JDBCAPI一個(gè)是底層的JDBCDriverAPI。PKUJDBC編程框架JDBCAPI

JDBCAPI被描述成為一組抽象的Java接口,可以對(duì)某個(gè)數(shù)據(jù)庫(kù)打開連接,執(zhí)行SQL語(yǔ)句并且處理結(jié)果。最重要的接口是:

java.sql.DriverManager處理驅(qū)動(dòng)的調(diào)入并且對(duì)產(chǎn)生新的數(shù)據(jù)庫(kù)連接提供支持。java.sql.Connection代表對(duì)特定數(shù)據(jù)庫(kù)的連接。java.sql.Statement代表一個(gè)特定的容器,來(lái)對(duì)一個(gè)特定的數(shù)據(jù)庫(kù)執(zhí)行SQL語(yǔ)句。PKUJDBC編程框架java.sql.ResultSet控制對(duì)一個(gè)特定語(yǔ)句的行數(shù)據(jù)的存取。其中java.sql.Statement又有兩個(gè)子類型:java.sql.PreparedStatement用于執(zhí)行預(yù)編譯的SQL語(yǔ)句。java.sql.CallableStatement用于執(zhí)行對(duì)一個(gè)數(shù)據(jù)庫(kù)內(nèi)嵌過(guò)程的調(diào)用。

PKUJDBC編程框架JDBCDriverAPIjava.sql.Driver驅(qū)動(dòng)程序,會(huì)將自身載入到DriverManager中去,并處理相應(yīng)的請(qǐng)求并返回相應(yīng)的數(shù)據(jù)庫(kù)連接。每個(gè)databasedriver必須提供這樣一個(gè)類,以使得系統(tǒng)可以由java.sql.DriverManager來(lái)管理。所有的driver必須提供對(duì)java.sql.Connection,java.sql.Statement,java.sql.PreparedStatement,andjava.sql.ResultSet的實(shí)現(xiàn)。如果目標(biāo)DBMS提供有OUT參數(shù)的內(nèi)嵌過(guò)程,那么還必須提供java.sql.CallableStatement接口。PKUJDBC編程框架加載驅(qū)動(dòng)程序建立連接用于向數(shù)據(jù)庫(kù)發(fā)送SQL語(yǔ)句執(zhí)行查詢處理得到的查詢結(jié)果關(guān)閉所有打開的資源PKU實(shí)例介紹//JDBCexample.javaimportjava.sql.*;classJDBC{

publicstaticvoidJDBCexample(Stringdbid,Stringuserid,Stringpasswd) {

try{ Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

Connectioncon=DriverManager.getConnection(dbid,userid,passwd);PKU

Statementstmt=con.createStatement();

try{ stmt.executeUpdate(“insertintoS values(‘s030’,‘劉’,‘鐵嶺',1)"); }catch(SQLExceptionsqle) {System.out.println("Couldnotinsert tuple."+sqle);}

ResultSetrs=stmt.executeQuery("SelectSNO, SNAME,CITYfromS");PKU

while(rs.next()){

System.out.println("SNO:"+rs.getString("SNO") +"SNAME:"+rs.getString("SNAME") +"CITY"+rs.getString("CITY")); } con.close(); }catch(SQLExceptionsqle) {System.out.println("SQLException:"+sqle);}

catch(Exceptione) {System.out.println("Exception:"+e);} }};PKUpublicclassJDBCexample{

publicstaticvoidmain(Stringargs[]){ JDBCexample=newJDBC(); example.JDBCexample("jdbc:odbc:db1","",""); }};Web數(shù)據(jù)庫(kù)訪問(wèn)PKU為什么數(shù)據(jù)庫(kù)要與Web接口Web瀏覽器已經(jīng)變成用戶訪問(wèn)數(shù)據(jù)庫(kù)的實(shí)際標(biāo)準(zhǔn)能夠使大量用戶從任何地方訪問(wèn)數(shù)據(jù)庫(kù)避免下載/安裝特定軟件,同時(shí)提供良好的圖形化用戶界面例如Banks,Airline/Carreservations,Universitycourseregistration/grading,…Web和數(shù)據(jù)庫(kù)的連接打開創(chuàng)新服務(wù)的大門新的服務(wù)和產(chǎn)品快速推向市場(chǎng),對(duì)競(jìng)爭(zhēng)做出及時(shí)反應(yīng)基于Web的支持服務(wù),增加客戶滿意度世界范圍的通用訪問(wèn),快速有效的信息維度PKU為什么數(shù)據(jù)庫(kù)要與Web接口動(dòng)態(tài)文檔給Web賦予生命靜態(tài)文檔的缺陷不能為用戶提供個(gè)性化文檔文檔更新有問(wèn)題,尤其是許多文檔共享數(shù)據(jù)時(shí)解決途徑:從數(shù)據(jù)庫(kù)中動(dòng)態(tài)產(chǎn)生文檔可以基于存儲(chǔ)在數(shù)據(jù)庫(kù)中的用戶信息來(lái)定制文檔例如定制廣告、天氣、新聞等顯示的信息是最新的,不像靜態(tài)頁(yè)面例如股票信息動(dòng)態(tài)網(wǎng)頁(yè)技術(shù)客戶端技術(shù):JavaApplet,客戶端腳本服務(wù)器端技術(shù):JavaServlet,服務(wù)器端腳本PKUHTMLHTML提供格式、顯示超文本鏈接HTML也提供輸入特征選擇項(xiàng):Pop-upmenus,radiobuttons,checklists值輸入:文本框輸入被送回服務(wù)器處理PKUHTML示例<html><body><tablebordercols=3> <tr><td>A-101</td><td>Downtown</td><td>500</td></tr>

…</table><center>The<i>account</i>relation</center><formaction=“BankQuery”method=get> Selectaccount/loanandenternumber<br> <selectname=“type”> <optionvalue=“account”selected>Account <optionvalue=“l(fā)oan”>Loan </select> <inputtype=textsize=5name=“number”> <inputtype=submitvalue=“submit”></form></body></html>PKUHTML顯示PKUHTTPHTTP:HyperTextTransferProtocol瀏覽器與Web服務(wù)器之間的通訊協(xié)議HTTP協(xié)議是無(wú)連接的當(dāng)用戶登錄到計(jì)算機(jī)或JDBC/ODBC服務(wù)器時(shí),連接一直保持,直到客戶端關(guān)閉它(保留用戶權(quán)限和其他信息)與此不同的,一旦Web服務(wù)器對(duì)請(qǐng)求做出響應(yīng),Web服務(wù)器馬上關(guān)閉與客戶端的連接動(dòng)機(jī):減少服務(wù)器負(fù)載操作系統(tǒng)對(duì)一個(gè)機(jī)器上打開連接的數(shù)目有嚴(yán)格限制PKUHTTP會(huì)話和Cookies信息服務(wù)需要會(huì)話信息例如用戶權(quán)限只在一次會(huì)話時(shí)授予解決方案:cookieCookie是包含確認(rèn)信息的小片文本在第一次連接時(shí)由服務(wù)器發(fā)送給瀏覽器由瀏覽器將創(chuàng)建的Cookie發(fā)送給服務(wù)器服務(wù)器保留它收到的Cookie,并在響應(yīng)請(qǐng)求時(shí)使用例如用戶授權(quán)信息,用戶偏好等SITESERVERID=743886/06428590083188777793003273629307734*PKU客戶端腳本/Applets瀏覽器可以將腳本或程序與文檔一起取回,并在客戶端以“安全模式”運(yùn)行它們JavascriptApplets客戶端腳本/程序使得文檔成為活動(dòng)的動(dòng)畫顯示保證用戶的輸入滿足正確性檢查允許與用戶進(jìn)行更便捷的交互,避免反復(fù)與Server通訊PKUJavaAppletsWeb-ServerHTTP-RequestHTML-FileWeb-ServerFile-SystemLoadFileFileLoadApplet...Java-ClassRequestsJava-ClassesExecuteApplet...JavaVirtualMachine(JVM)Server-ProcessPKU三層Web體系結(jié)構(gòu)PKU請(qǐng)求-服務(wù)流程Web瀏覽器向Web服務(wù)器請(qǐng)求一個(gè)網(wǎng)頁(yè);Web服務(wù)器用CGI將請(qǐng)求傳遞給應(yīng)用服務(wù)器;應(yīng)用服務(wù)器用ODBC連接數(shù)據(jù)庫(kù);應(yīng)用服務(wù)器接受查詢結(jié)果并創(chuàng)建HTML網(wǎng)頁(yè);應(yīng)用服務(wù)器用CGI將網(wǎng)頁(yè)發(fā)送回Web服務(wù)器;Web服務(wù)器將網(wǎng)頁(yè)發(fā)送回瀏覽器;HTML輸出顯示在客戶計(jì)算機(jī)的Web瀏覽器上。PKUWeb-ServerHTTP-RequestHTML-FileWeb-ServerFile-SystemLoadFileFileHTML?HTMLExecuteProgramProgram?OutputI/O,Network,DB通用網(wǎng)關(guān)接口:CGIPKU兩層Web體系結(jié)構(gòu)PKU體系結(jié)構(gòu)的簡(jiǎn)化三層Web體系結(jié)構(gòu)的弊端多級(jí)服務(wù)器之間的交互增加了系統(tǒng)負(fù)載CGI接口對(duì)每一個(gè)請(qǐng)求都會(huì)開始一個(gè)新進(jìn)程二層Web體系結(jié)構(gòu)應(yīng)用服務(wù)器作為Web服務(wù)器本身的一部分運(yùn)行兩種實(shí)現(xiàn)方式通過(guò)Web服務(wù)器裝載Java程序Javaservlet定義了服務(wù)器和應(yīng)用程序之間的通信接口。更簡(jiǎn)單的方法:使用服務(wù)器端腳本語(yǔ)言PKU服務(wù)器端腳本服務(wù)器端腳本簡(jiǎn)化了數(shù)據(jù)庫(kù)與Web連接的任務(wù)定義嵌入可執(zhí)行代碼/SQL查詢的HTML文檔從HTML文檔輸入的值可以直接在嵌入代碼/SQL查詢中使用當(dāng)請(qǐng)求該文檔時(shí),Web服務(wù)器執(zhí)行嵌入代碼/SQL查詢,產(chǎn)生真正的HTML文檔很多服務(wù)器端腳本語(yǔ)言JSP,服務(wù)器端Javascript,ColdFusion,PHP,JscriptVBScript,Perl,PythonPKU服務(wù)器端腳本W(wǎng)eb-ServerFile-SystemWeb-ServerHTTP-RequestHTML-FileLoadFileFileHTMLI/O,Network,DBScript?OutputServerExtensionHTML?PKUPHPFile-SystemWeb-ServerHTTP-RequestHTML-FileLoadFilePHP-FileHTMLPHP-ScriptOutputDatabaseAPIs,otherAPIsSNMP,IMAP,POP3,LDAP,...PHPModuleWeb-ServerPKUPHP<HTML><BODY><?PHP$db=mysql_connect("localhost","dbuser");mysql_select_db("mydb",$db);$result=mysql_query("SELECT*FROMemployees",$db);?><TABLEBORDER=1><TR><TD>NAME</TD><TD>POSITION</TR><?PHPwhile($myrow=mysql_fetch_row($result)){printf("<tr><td>%s%s</td><td>%s</td></tr>\n",

$myrow[1],$myrow[2],$myrow[3]);}?></TABLE></BODY></HTML>

PKUColdFusion確切的描述:Web應(yīng)用服務(wù)器將Web服務(wù)器與大量服務(wù)如數(shù)據(jù)庫(kù)、郵件、搜索引擎等連接起來(lái),擴(kuò)展Web服務(wù)器的功能。CFML-ColdFusionMarkupLanguage服務(wù)器端標(biāo)志語(yǔ)言,用于編寫ColdFusion腳本腳本:一組以解釋模式運(yùn)行的指令Jeremy&J.J.Allaire,1995ColdFusion的一切就是為了節(jié)省時(shí)間PKUColdFusionFile-SystemWeb-ServerHTTP-RequestHTML-FileWeb-ServerLoadFileFileHTML?HTMLCFScript?HTMLColdFusionServerExtensionColdFusionApplicationServerODBC-DriverNativeDBDBEmailDirectoriesCOM/CORBAPKUColdFusion的工作流程瀏覽器向Web服務(wù)器請(qǐng)求一個(gè).cfm頁(yè)面;Web服務(wù)器查找.cfm腳本;ColdFusion執(zhí)行該腳本并與相應(yīng)的服務(wù)連接;ColdFusion將腳本的輸出結(jié)果以HTML格式發(fā)送回Web服務(wù)器;Web服務(wù)器將網(wǎng)頁(yè)發(fā)送回瀏覽器;HTML輸出顯示在客戶計(jì)算機(jī)的Web瀏覽器上。PKUColdFusion的安裝與配置在Windows2000/XP下的安裝過(guò)程:第一步:確認(rèn)已經(jīng)安裝并正在運(yùn)行著Web服務(wù)器軟件,如MicrosoftIIS,并將樣例文件夾復(fù)制到Web服務(wù)器的根目錄下,如C:\Inetpub\wwwroot\;第二步:安裝ColdFusion,重啟;第三步:運(yùn)行ColdFusionAdministrator,配置ODBC數(shù)據(jù)源;安裝成功!在瀏覽器中運(yùn)行樣例:/RobCor/ch15-0.cfmPKU基本操作(1):查詢<CFQUERY>NAME=“queryname”,這個(gè)名字唯一確定數(shù)據(jù)庫(kù)查詢返回的記錄集;DATASOURCE=“datasourcename”,使用ODBC中定義的數(shù)據(jù)源名稱;SQL語(yǔ)句,可以使用任何ODBC兼容的語(yǔ)句<CFQUERYNAME=“venlist”DATASOURCE=“RobCor”>SELECT*FROMVENDORORDERBYVEN_CODE</CFQUERY>PKU基本操作(2):顯示<CFOUTPUT>QUERY=“queryname”,可選參數(shù),若指定某個(gè)返回10行記錄的查詢,CFOUTPUT標(biāo)簽開始和結(jié)束之間所有的指令都會(huì)被執(zhí)行10次;可以在CFOUTPUT標(biāo)簽開始和結(jié)束之間包括任何合法的HTML標(biāo)簽或文本。用#號(hào)來(lái)引用結(jié)果記錄集中的字段,或調(diào)用其它函數(shù)和變量。當(dāng)ColdFusion遇到某個(gè)由#號(hào)封裝的名字時(shí),將計(jì)算該名字的值。PKU基本操作(2):顯示(例)/RobCor/ch15-1.cfm<CFOUTPUT>Yourqueryreturned#venlist.RecordCount#records</CFOUTPUT><CFOUTPUTQUERY="venlist"><PRE><B>VENDORCODE: #VEN_CODE#VENDORNAME: #VEN_NAME#CONTACTPERSON: #VEN_CONTACT_NAME#PHONE: #VEN_PH#<HR></B></PRE></CFOUTPUT>PKU創(chuàng)建動(dòng)態(tài)查詢網(wǎng)頁(yè)<HTML><BODY><FORMACTION="/cf/pf.cfm"><H1>FindPerson</H1>PersonName<INPUTNAME="PNAME"><p><INPUTTYPE="submit"VALUE="Find"></FORM></BODY></HTML><CFQUERYNAME=“PersonInfo” DATASOURCE=“PersonDB”>

SELECT*FROMPersons WHEREName=#Form.PName#</CFQUERY><HTML><BODY><CFOUTPUTQUERY=“PersonInfo”><H1>

#Name#

</H1><UL><LI><B>Age=</B>#Age#<LI><B>Salary=</B>$#Sal#<LI><Ahref=“#URL#”><B>Homepage</B></A></UL></CFOUTPUT></BODY></HTML>PKU創(chuàng)建動(dòng)態(tài)查詢網(wǎng)頁(yè)第一步:創(chuàng)建一個(gè)腳本來(lái)生成一個(gè)窗體,用戶可以使用該窗體來(lái)輸入在搜索中使用的條件。換句話說(shuō),該窗體允許用戶輸入在查詢語(yǔ)句中使用的參數(shù)值;第二步:創(chuàng)建一個(gè)腳本來(lái)執(zhí)行查詢和顯示查詢結(jié)果,這里將使用在第一步生成的腳本傳遞過(guò)來(lái)的參數(shù)。/RobCor/ch15-4a.cfmPKU數(shù)據(jù)插入第一頁(yè):生成一個(gè)窗體,用戶可以使用該窗體來(lái)輸入數(shù)據(jù)。在這一步中,服務(wù)器端將進(jìn)行數(shù)據(jù)的驗(yàn)證;第二頁(yè):執(zhí)行數(shù)據(jù)的插入。<CFINSERT>DATASOURCE=“datasourc_name”TABLENAME=“table_name”/RobCor/ch15-5a.cfmPKU數(shù)據(jù)更新第一頁(yè):允許用戶選擇要更新的記錄;第二頁(yè):讀取所選擇的記錄,顯示一個(gè)數(shù)據(jù)錄入窗體讓用戶修改數(shù)據(jù);第三頁(yè):利用第二步的窗體字段更新數(shù)據(jù)庫(kù)中的數(shù)據(jù)。<CFUPDATE>DATASOURCE=“datasourc_name”TABLENAME=“table_name”/RobCor/ch15-6a.cfmPKU數(shù)據(jù)刪除第一頁(yè):允許用戶選擇要更新的記錄;第二頁(yè):讀取所選擇的記錄,同時(shí)執(zhí)行完整性檢查;第三頁(yè):利用第二頁(yè)傳來(lái)的主碼執(zhí)行數(shù)據(jù)的刪除。/RobCor/ch15-7a.cfmPKU還有更多……以上提到的ColdFusion技術(shù)只代表了基于數(shù)據(jù)庫(kù)的Web應(yīng)用開發(fā)的冰山一角。ColdFusion提供數(shù)以百計(jì)的標(biāo)簽和函數(shù)來(lái)幫助我們有效地開發(fā)專業(yè)Web應(yīng)用。如果一個(gè)數(shù)據(jù)庫(kù)本身的設(shè)計(jì)存在缺陷,Web接口將更容易導(dǎo)致大范圍的數(shù)據(jù)庫(kù)災(zāi)難。好的數(shù)據(jù)庫(kù)設(shè)計(jì)和實(shí)現(xiàn)+好的Web開發(fā)技術(shù)=無(wú)限的商業(yè)戰(zhàn)術(shù)和戰(zhàn)略優(yōu)勢(shì)注意使用PHP訪問(wèn)MySQL數(shù)據(jù)庫(kù)PKU提綱PHP介紹MySQL介紹PHP訪問(wèn)MySQL數(shù)據(jù)庫(kù)利用PHP數(shù)據(jù)庫(kù)函數(shù)連接MySQLPHP通過(guò)ODBC連接MySQL兩種方法的對(duì)比PKUPHP介紹PHP(PersonalHomePage)是一種跨平臺(tái)的服務(wù)器端嵌入式腳本語(yǔ)言。它最初是RasmusLerdorf于1994年開發(fā)的。在PHP早期的版本中,提供了訪客留言本、訪客計(jì)數(shù)器等簡(jiǎn)單功能。隨后,在第二版中增加了對(duì)mSQL的支持。自此奠定了PHP在動(dòng)態(tài)網(wǎng)頁(yè)開發(fā)上的影響力,并迅速在Internet上流傳開來(lái)。PKUPHP介紹截至2006年8月,在全球范圍內(nèi),共有超過(guò)2000萬(wàn)動(dòng)態(tài)站點(diǎn)使用著PHP,包括Yahoo!等著名網(wǎng)站,目前有超過(guò)半數(shù)的Ajax-enabled和Web2.0站點(diǎn)選擇應(yīng)用PHP。除此之外,PHP也是企業(yè)用來(lái)構(gòu)建服務(wù)導(dǎo)向型、創(chuàng)造和混合web服務(wù)融于新一代的綜合性商業(yè)應(yīng)用的語(yǔ)言,成為開源商業(yè)應(yīng)用發(fā)展的方向。PKUPHP介紹PHP流行有以下幾個(gè)原因:兼容C的語(yǔ)法,容易掌握。運(yùn)行速度快。非常強(qiáng)的容錯(cuò),很好的魯棒性能。豐富的函數(shù)和簡(jiǎn)單的操作。在函數(shù)支持方面,PHP幾乎覆蓋了Web應(yīng)用的各個(gè)方面,其中最有特色的是數(shù)據(jù)庫(kù)函數(shù),使用PHP完成一個(gè)含有數(shù)據(jù)庫(kù)功能的網(wǎng)頁(yè)非常簡(jiǎn)單,而PHP支持的數(shù)據(jù)庫(kù)也非常豐富,目前包括:Oracle、Sybase、SQLServer、MySQL、Informix等。PHP是開源的,在各種平臺(tái)上都可以自由加入新的函數(shù)。PKUMySQL介紹MySQL是一個(gè)快速、健壯和易用,且支持多線程、多用戶的SQL數(shù)據(jù)庫(kù)服務(wù)器。MySQL是一個(gè)客戶機(jī)/服務(wù)器結(jié)構(gòu)的應(yīng)用,它由一個(gè)服務(wù)器守護(hù)程序mysqld和很多不同的客戶程序和庫(kù)組成。MySQL是多平臺(tái)的,是目前使用最廣的開源數(shù)據(jù)庫(kù)軟件。PKUMySQL介紹MySQL的主要特點(diǎn)完全多線程,適于多CPU使用。提供C,C++,JAVA(JDBC),Perl,Python,PHP和TCL的API接口。多平臺(tái),包括:Solaris,SunOS,BSDI,SGIAIX,DECUNIX,Linux,F(xiàn)reeBSD,SCOOpenServer,NetBSD,OpenBSD,HPUX,Win9xandNT.(各臺(tái)支持的功能不盡相同)。PKUMySQL介紹數(shù)據(jù)類型多樣。非常靈活和安全的權(quán)限系統(tǒng),密碼加密。為Win9X提供ODBC接口,可通過(guò)Access與之相聯(lián).另有第三方開發(fā)商提供多樣的ODBC驅(qū)動(dòng)程序??商幚泶笮蛿?shù)據(jù)(超過(guò)5千萬(wàn)個(gè)記錄)。通過(guò)權(quán)威檢測(cè),無(wú)內(nèi)存泄露。多種語(yǔ)言支持。PKUMySQL介紹MySQL的快速和靈活性足以滿足一個(gè)網(wǎng)站的信息管理工作。因此,PHP+MySQL靠其功能強(qiáng)大、價(jià)格低廉、跨平臺(tái)等特性,成為網(wǎng)站架構(gòu)的絕佳組合。PKUPHP訪問(wèn)MySQL數(shù)據(jù)庫(kù)PHP訪問(wèn)MySQL數(shù)據(jù)庫(kù)的方式主要有兩種:1.利用PHP的數(shù)據(jù)庫(kù)函數(shù)連接。PHP對(duì)不同類型的數(shù)據(jù)庫(kù)一般有不同的訪問(wèn)函數(shù),使它能夠快速讀取絕大多數(shù)數(shù)據(jù)庫(kù)或數(shù)據(jù)源中的數(shù)據(jù),包括DBA、dBase、Informix、SQLServer、MySQL、Sybase、Oracle、PostgreSQL等等。2.通過(guò)ODBC連接PKU利用PHP數(shù)據(jù)庫(kù)函數(shù)連接MySQLPHP函數(shù)中,針對(duì)MySQL數(shù)據(jù)庫(kù),常用函數(shù)有:mysql_connect():建立與MySQL服務(wù)器的連接。mysql_createdb():建立一個(gè)新的MySQL數(shù)據(jù)庫(kù)。mysql_drop_db():刪除一個(gè)指定的MySQL數(shù)據(jù)庫(kù)。mysql_select_db():選擇一個(gè)MySQL數(shù)據(jù)庫(kù)。mysql_query():送出query字符串以幫助MySQL做相關(guān)的處理或執(zhí)行。mysql_num_rows():本函數(shù)返回表行的數(shù)目,一般配合SELECT語(yǔ)句進(jìn)行查詢操作。mysql_close():關(guān)閉與MySQL服務(wù)器的連接。PKU利用PHP數(shù)據(jù)庫(kù)函數(shù)連接MySQL用PHP程序訪問(wèn)MySQL數(shù)據(jù)庫(kù)的方法比較簡(jiǎn)單,典型的步驟如下:(1)用函數(shù)mysql_connect(string[server],string[username],string[password])建立與MySQL服務(wù)器的連接。如連接成功,函數(shù)返回一個(gè)連接標(biāo)識(shí);否則,返回FALSE,表明連接失敗。這里,參數(shù)server可以寫成“host-name:port”的形式。如果函數(shù)調(diào)用中未填寫參數(shù)server,則缺省為server=’localhost:3306’,缺省用戶名為數(shù)據(jù)庫(kù)服務(wù)器進(jìn)程的擁有者。PKU利用PHP數(shù)據(jù)庫(kù)函數(shù)連接MySQL(2)用mysql_select_db(stringdatabase-name,resource[link-identifier])函數(shù)設(shè)置與指定數(shù)據(jù)庫(kù)連接標(biāo)識(shí)相關(guān)的當(dāng)前活動(dòng)數(shù)據(jù)庫(kù)。如缺省連接標(biāo)識(shí),則使用前面已經(jīng)建立的連接;如前面沒(méi)有建立連接,則函數(shù)試圖建立一個(gè)連接后再設(shè)置與指定數(shù)據(jù)庫(kù)連接相關(guān)的當(dāng)前活動(dòng)數(shù)據(jù)庫(kù)。函數(shù)調(diào)用成功,返回TRUE;否則,返回FALSE。PKU利用PHP數(shù)據(jù)庫(kù)函數(shù)連接MySQL(3)準(zhǔn)備好符合SQL語(yǔ)言標(biāo)準(zhǔn)的語(yǔ)句字符串,即類似于$sql1=“select*fromtablewhere….”程序語(yǔ)句。(4)用mysql_query(stringquery[,resourcelink_identifier])訪問(wèn)數(shù)據(jù)庫(kù)。(5)如(4)是查詢操作,則用mysql_fetch_array(resourceresult,int[result_type])從生成的記錄集中取記錄。(6)用mysql_close()關(guān)閉數(shù)據(jù)庫(kù)。PKU利用PHP數(shù)據(jù)庫(kù)函數(shù)連接MySQL例程:

<?php $con=mysql_connect(‘localhost’,’root’,’adminpassword’); /*上面localhost是數(shù)據(jù)庫(kù)服務(wù)器的名稱,root是用戶名,后面一項(xiàng)是root密碼。*/

Mysql_select_db(‘database’

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論