版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第10章
中間件技術
內容異構數據庫與中間件ODBC結構ODBC接口ODBC的符合性級別異構數據庫網絡上存在各種截然不同的數據庫SQLServerDB2ORACLESYBASE…..ApplicationCONNECTSQLServerORACLEDB2中間件中間件的定義中間件的作用中間件的定義中間件(middleware):是分布式環(huán)境中保證操作系統(tǒng)、通信協議、數據庫等之間進行對話、互操作的軟件系統(tǒng)。在C/S環(huán)境中,中間件同時存在于客戶端和服務器端,負責客戶和服務器間透明的請求和回答交換。中間件允許不同服務器之間相互通信,如數據庫網關。應用開發(fā)者不需關心特定環(huán)境的低層細節(jié),通過中間件等訪問數據庫,有關代碼不依賴于某一具體數據庫及該數據庫所在平臺,所得到的應用軟件也易于移植和升級。中間件的作用中間件的作用是保證網絡中各部件(軟件和硬件)之間透明地連接隱藏網絡部件的異構性,保證不同網絡、不同DBMS和某些訪問語言的透明性。網絡透明性:能支持所有類型的網絡。服務器透明性:不管服務器上的DBMS是何種型號(ORACLE、SYBASE、DB2等。語言透明性:客戶機可用任何開發(fā)語言進行發(fā)送請求和接受回答,被調用的功能應該像語言那樣也是獨立的。
中間件的分類根據用途不同,中間件可分為:數據訪問中間件,如ODBC,JDBC,OLEDB;遠程過程調用(RPC)中間件;分布式事務處理中間件;對象調用中間件;面向消息的中間件;等。ODBC結構ODBC概念ODBC的體系結構ODBC的特性網絡異構數據庫訪問接口傳統(tǒng)的數據庫編程方式“主語言+DML”問題:特定的前端應用不能訪問不同數據庫服務器上的數據。各廠商的SQL版本不同,使得不同的RDBMS提供的SQL互不兼容。不同廠商的RDBMS在客戶機與數據庫服務器之間使用了不同的通信協議。公共的、與數據庫無關的應用程序設計接口(API:ApplicationProgrammingInterface)。開發(fā)者提供單一的編程接口,同一個應用程序就可以訪問不同的數據庫服務器。網絡異構數據庫訪問接口SQL/CLI1989,微軟等四家公司聯合提出SQLConnectivity訪問接口規(guī)范,定義了一批訪問數據庫的函數1990,SAG(SQLAccessGroup)集團接受SQLConnectivity作為其調用級接口規(guī)范的基礎(CallLevelInterface,CLI),并獲得ANSI,ISO的認可,作為SQL92的附件SQL/CLI1992,微軟發(fā)布基于擴展的SQL/CLI的工具集ODBCODBC概念最早的ODBC版本1.0是在1993年8月發(fā)布的。2.0版本、3.0版本、3.5版本分別在1994年12月、1995年10月、1996年10月發(fā)布,每一次的發(fā)布都作了一些改進,著重于速度、對新的OS的兼容性以及對ODBC可訪問的更高級DBS所具有的功能提供支持。ODBC技術對C/S計算模式的發(fā)展產生了革命性的影響。微軟ODBCV3.0有61個函數,分為10類ODBC函數類型連接一個數據源取得有關驅動程序和數據源的信息設置并檢索驅動程序的屬性設置并檢索描述字符段準備SQL請求提交請求檢索結果及有關結果的信息獲得有關數據源系統(tǒng)表的信息結束一條語句結束一個連接ODBC原理應用程序應用程序應用程序……SYBASE公共接口API網絡軟件FoxproSQLServerDB2Oracle圖10.1采用API的應用編程ODBC的體系結構ODBC數據庫應用程序驅動程序管理器SQLServer驅動程序Oracle驅動程序Foxpro驅動程序Sybase驅動程序DB2驅動程序SQLServer數據源Oracle數據源DB2數據源Sybase數據源Foxpro數據源DBDBDBDBDB圖10.2ODBC的分層體系結構ODBC的體系結構數據源:DB驅動程序與DBS之間連接的命名包含了數據庫位置和數據庫類型等信息是一種數據連接的抽象注冊一個數據源:通過ODBC管理器注冊控制面板—系統(tǒng)和安全—管理工具—數據源(ODBC)ODBC管理器:管理安裝的ODBC驅動程序和管理數據源根據數據源提供的數據庫位置、數據庫類型及ODBC驅動程序等信息,建立起ODBC與具體數據庫的聯系應用程序提供數據源名給ODBC,ODBC就能建立起與相應數據庫的連接ODBC的體系結構數據源分為以下三類:用戶數據源:用戶創(chuàng)建的數據源,稱為“用戶數據源”。此時只有創(chuàng)建者才能使用,并且只能在所定義的機器上運行。任何用戶都不能使用其他用戶創(chuàng)建的用戶數據源。系統(tǒng)數據源:系統(tǒng)數據源屬于創(chuàng)建它的計算機,而不是創(chuàng)建它的用戶。所有用戶和在WindowsNT下以服務方式運行的應用程序均可使用系統(tǒng)數據源。文件數據源:文件數據源是ODBC3.0以上版本增加的一種數據源,可用于企業(yè)用戶,ODBC驅動程序也安裝在用戶的計算機上共享數據庫文件。用戶數據源用戶數據源用戶數據源ODBC的體系結構DB驅動程序ODBC函數和數據源交互的DLL,提供了ODBC和數據庫之間的接口,裝入:應用程序調用SQLConnect或SQLDriverConnect時,驅動程序管理器裝入相應的驅動程序對來自應用程序的ODBC函數調用進行應答,按照其要求執(zhí)行以下任務:建立應用程序與數據源的連接;向數據源提交用戶請求執(zhí)行的SQL語句;在應用程序需求時,轉換數據格式;把處理結果返回給應用程序;將執(zhí)行過程中DBS返回的錯誤轉換成ODBC定義的標準錯誤代碼,并返回給應用程序;根據需要定義和使用光標。ODBC的體系結構DB驅動程序:SQLServer的驅動數據源和DB驅動程序數據源和DB驅動程序數據源和DB驅動程序數據源和DB驅動程序數據源和DB驅動程序數據源和DB驅動程序數據源和DB驅動程序數據源和DB驅動程序數據源和DB驅動程序ODBC的體系結構DB驅動程序:兩類單層次(single-tier):這種方式下,驅動程序要處理ODBC調用SQL語句,并直接操縱數據庫,因此具有數據存取功能。最常見的是同一臺微機之上異種數據庫通過ODBC存取,如在PowerBuilder中存取Excel、Paradox等數據文件ODBC的體系結構工作站ODBC數據庫應用程序驅動程序管理器單層驅動程序(包含DB引擎)數據庫文件(*.mdf)網絡文件服務器ODBC的體系結構多層驅動程序:驅動程序僅處理ODBC調用將SQL語句交給服務器執(zhí)行,然后返回結果往往應用程序、驅動程序管理器、驅動程序駐留在客戶機端,而數據源和數據存取功能放在服務器端FoxPro或PowerBuilder存取SQLServer或Oracle上的數據兩者之間加上網關以解決通信協議的轉換等問題ODBC的體系結構工作站ODBC數據庫應用程序驅動程序管理器單層驅動程序(包含DB引擎)數據庫文件(*.DBF)網絡文件服務器圖10.3網絡環(huán)境下基于單層驅動程序的ODBC結構ODBC的體系結構ODBC數據庫應用程序
驅動程序管理器多層驅動程序
客戶端網絡支撐軟件
服務器網絡支撐軟件數據庫引擎數據庫文件(*.mdf)DB服務器(網絡)客戶端SQL請求操作結果圖10.4基于多層驅動程序的ODBC結構(兩層結構)Web數據庫中間件體系結構在web上為解決Web到數據庫通信協議的轉換,加入數據庫網關基于通用網關CGI:CGI:www服務器外部程序規(guī)范,按照CGI編寫的程序用于擴展服務器的功能。用戶瀏覽器通過HTTP協議向web服務器發(fā)出查詢請求Web服務器按照CGI協議激活外部程序CGI程序分析html文本,生成查詢要求的SQL語句,連接數據庫,將DBMS返回的結果轉化為html文本,發(fā)送給web服務器Web服務器將嵌入有查詢結果的html文本發(fā)送用戶瀏覽器ODBC的體系結構CGI的局限性客戶端與后端數據庫服務器通信必須通過Web服務器,且Web服務器要進行數據與HTML文檔的互相轉換,當多個用戶同時發(fā)出請求時,必然在Web服務器形成信息和發(fā)布瓶頸;CGI應用程序每次運行都需打開和關閉數據庫連接,效率低,操作費時;CGI應用程序不能由多個客戶機請求共享,即使新請求到來時CGI程序正在運行,也會啟動另一個CGI應用程序,隨著并行請求的數量增加,服務器上將生成越來越多的進程。為每個請求都生成進程既費時又需要大量內存,影響了資源的使用效率,導致性能降低并增加等待時間;由于SQL與HTML差異很大,CGI程序中的轉換代碼編寫繁瑣,維護困難;安全性差,缺少用戶訪問控制,對數據庫難以設置安全訪問權限;HTTP協議是無狀態(tài)且沒有常連接的協議,DBMS事務的提交與否無法得到驗證,不能構造Web上的OLTP(On-LineTransactionProcessing聯機事務處理)應用。ODBC的體系結構基于擴展的web服務器API作為dll駐留在web服務器中,功能與CGI類似。與web服務器結合緊密,占用資源少各個廠家的API兼容性差,編程復雜,多線程,同步,直接協議編程,錯誤處理等ASP(ActiveServerPages)基于組件(com)模型,結合html腳本可以直接在html文本中包含可執(zhí)行的腳本,html文本和腳本的開發(fā)結合為一個過程JDBCJava執(zhí)行SQL語句的API,由一系列的類和接口組成(Java.sql包中)通過JDBC,Javaapplet可以直接與數據庫連接、查詢ODBC的體系結構客戶端首先訪問Web服務器,下載Java字節(jié)碼文件,并將Applet相關類的字節(jié)碼文件和JDBC接口字節(jié)碼文件下栽到客戶端,然后與Web服務器脫離,接著Applet根據數據庫地址,端口號和帳號與數據庫服務器連接進行交互,這樣用戶與數據庫服務器的交互是由瀏覽器直接完成的。Web數據庫中間件體系結構數據庫應用程序
客戶端網絡支撐軟件
數據庫引擎數據庫服務器網絡支撐軟件數據庫網關驅動程序管理器驅動程序圖10.5基于網關機制的多層驅動程序的ODBC結構(三層結構)客戶瀏覽器(網絡)WWW服務器數據庫服務器ODBC的體系結構驅動程序管理器:一個動態(tài)鏈接庫(DLL),ODBC32.DLL用于連接各種DBS的DBMS驅動程序,管理應用程序和DBMS驅動程序之間的交互作用(通信)。驅動程序管理器的主要功能如下:為不同驅動程序的ODBC函數提供單一的入口;檢查ODBC調用參數的合法性和記錄ODBC函數的調用;為應用程序加載DBMS驅動程序;調用正確的DBMS驅動程序;提供驅動程序信息。ODBC的體系結構應用程序主要完成:連接數據庫; 向數據源發(fā)送SQL語句;為SQL語句執(zhí)行結果分配存儲空間;讀取結果;處理錯誤;
向用戶提交處理結果;事務提交和回退操作;斷開與數據源的連接。ODBC的特性從ODBC的體系結構可以看出,ODBC技術有下列三個特性:(1)ODBC是一個調用層的接口。(2)ODBC定義了標準的SQL語法。(3)ODBC提供一個驅動程序管理器來管理 并同時訪問多個DBMS系統(tǒng)。ODBC接口ODBC應用程序的基本流程ODBC句柄數據源的連接與斷開SQL語句的執(zhí)行查詢結果的獲取應用程序的基本流程分配環(huán)境句柄
分配連接句柄
與服務器連接分配語句句柄
語句處理和檢索
與服務器斷開釋放語句句柄釋放連接句柄釋放環(huán)境句柄SQLAllocEnvSQLAllocConnectSQLConnectSQLAllocStmtSQLExecDirect(直接執(zhí)行)SQLPrepare(語句預備)SQLExecute(語句執(zhí)行)SQLDisconnectSQLFreeStmtSQLFreeConnectSQLFreeEnv初始化
SQL處理
終止
圖10.6ODBC應用程序的基本流程ODBC句柄
環(huán)境句柄應用程序連接句柄連接句柄連接句柄語句句柄語句句柄語句句柄(只有一個)…………圖10.7三種句柄之間的關系ODBC句柄…………環(huán)境句柄(定義DB應用環(huán)境)連接句柄(定義一個DB連接)語句句柄(定義一個SQL語句)□□□henvhdbc
hstmt
圖10.8各種句柄之間的關系ODBC句柄一個ODBC句柄(Handle):一個應用程序變量,用來存儲關于應用程序的上下文信息和應用程序所用到的一些對象。ODBC使用三個句柄環(huán)境句柄,一個環(huán)境句柄可以與多個連接句柄相連連接句柄,一個連接句柄可與多個語句句柄相連語句句柄,個應用程序只有一個環(huán)境句柄。環(huán)境句柄定義一個數據庫環(huán)境, 連接句柄定義一個數據庫連接, 語句句柄定義一條SQL語句。對于句柄,有兩個ODBC函數:分配函數和釋放函數。ODBC句柄環(huán)境句柄(EnvironmentHandles)
(1)分配環(huán)境句柄函數:SQLAllocEnv(phenv) (2)釋放環(huán)境句柄函數:SQLFreeEnv(henv)連接句柄(ConnectionHandles) (1)分配連接句柄函數:SQLAllocConnect(henv,phdbc)
(2)釋放連接句柄函數:SQLFreeConnect(hdbc)語句句柄(StatementsHandles) (1)分配語句句柄函數:SQLAllocStmt(hdbc,phstmt) (2)釋放語句句柄函數:SQLFreeStmt(hstmt,fOption)
數據源的連接與斷開(1)連接數據源的函數
SQLConnect(hdbc,szDSN,cbDSN,szUID,cbUID,szAuthStr,cbAuthStr)。 參數hdbc是一個已經分配的連接分配; 參數szDSN和cbDSN分別表示系統(tǒng)所要連接的數據源 名稱及其長度; 參數szUID和cbUID分別表示用戶標識符及其長度; 參數szAuthStr和cbAuthStr分別表示權限字符串 及其長度。(2)斷開數據源函數
SQLDisconnect(hdbc)參數hdbc是要斷開的連接句柄。
SQL語句的執(zhí)行1.直接執(zhí)行SQL語句的函數SQLExecDirect(hstmt,szSqlStr,cbSqlStr)其中,參數hstmt是一個有效的語句句柄; 參數szSqlStr和cbSqlStr分別表示將要執(zhí)行 的SQL語句的字符串及其長度。例如,要以直接執(zhí)行的方法列出學生表中的信息,調用該函數的格式是:retcode=SQLExecDirect(hstmt,“SELECT*FROMS”,SQL_NTS)SQL語句的執(zhí)行main(){HENV henv; /*說明henv是一個環(huán)境型變量*/HDBC hdbc; /*說明hdbc是一個連接型變量*/HSTMT hstmt /*說明hstmt是一個語句句柄變量*/RETCODE retcode; /*說明retcode是一個返回變量*/SQLAllocEnv(&henv); /*分配一個環(huán)境句柄*/SQLAllocConnect(henv,&hdbc);/*分配一個連接句柄*/SQLConnect(hdbc,“學生”,SQL_NTS,NULL,0,NULL,0); /*連接數據源*/SQLAllocStmt(hdbc,&hstmt); /*分配一個語句句柄*/retcode=SQLExecDirect(hstmt,“SELECT*FROMS”,SQL_NTS); /*執(zhí)行語句*/
……
/*結果集處理*/SQLDisconnect(hdbc); /*斷開數據源*/SQLFreeStmt(hstmt,SQL_DROP)/*釋放一個語句句柄*/SQLFreeConnect(hdbc); /*釋放一個連接句柄*/SQLFreeEnv(henv); /*當應用完成后,釋放環(huán)境句柄*/}SQL語句的執(zhí)行2.有準備地執(zhí)行SQL語句的函數(1)SQL語句預備函數
SQLPrepare(hstmt,szSqlStr,cbSqlStr)
其中,參數hstmt是一個有效的語句句柄,參數szSqlStr和cbSqlStr分別表示將要執(zhí)行的SQL語句的字符串及其長度。(2)SQL語句執(zhí)行函數
SQLExecute(hstmt) 其中參數hstmt是一個有效的語句句柄。查詢結果的獲取(1)移動光標函數 SQLFetch(hstmt)該函數的功能是把光標移到下一行。(2)讀光標指向行中一列值的函數SQLGetData(hstmt,icol,fCType, rgbValue,cbValueMax,pcbValue)查詢結果的獲取例10.2在例10.1程序的中間省略部分“……”插入下面一段語句,執(zhí)行讀查詢結果集中的數據。while(RETCODE_IS_SUCCESSFUL(retcode)){retcode=SQLFetch(hstmt);if(RETCODE_IS_SUCCESSFUL(retcode){do{rcGetData=SQLGetData(hstmt,1, SQL_C_CHAR,szBuffer, sizeof(szBuffer),&cbValue); DISPLAY_MEMO(szBuffer,cbValue);/*顯示*/ }while(rcGetData!=SQL_NO_DATA_FOUND);}}ODBC的符合性級別API符合性的三個級別SQL符合性的三個級別ODBCAPI與SQLCLI之間的協調SQLCLI與嵌入式SQL的比較SQLCLI的應用ODBC的符合性級別ODBC問題:有的SQL功能在某廠商的DBMS上沒有實現,則ODBC就不可能為應用程序完成這一功能;有的SQL功能是SQL標準新增加的,而DBMS廠商沒有及時跟上,則ODBC同樣也無法完成新功能。對于具體DBMS不支持的SQL功能,DBMS要通報給應用程序。從ODBC本身來講,它最好支持完全的SQL,這樣才能做到應用程序不用修改就可以訪問不同的數據源。API符合性的三個級別
1.核心級API 核心級API有22個函數,包括了完成一個數據庫應用程序所要做的所有必備的工作。2.1級API 1級API除包括核心級API22個函數外,還包括16個附加函數。3.2級API 2級API除包括核心級API22個函數和1級API16個函數外,還包括17個附加函數。SQL符合性的三個級別
SQL符合性級別不是對編程的限制,應用程序可以自由地使用各種SQL語句,如果DBMS不支持,則驅動程序會報告。SQL符合性級別有:最小級SQL,核心級SQL,擴展級SQL。ODBC定義了這三個級別的SQL語法兼容性,每一后繼級別都建立在較低級別的基礎上,它包括前一級別所支持的SQL語句,也增加了一些語句。ODBCAPI與SQLCLI 之間的協調MS公司于1991年11月提出了一個關于ODBC的體系結構,并在1992年發(fā)布了ODBC1.0規(guī)范,隨后以SDK形式出版并發(fā)行了這種面向SQL的API。數據庫公司國際財團SQLAccessGroup(SAG)和標準化組織X/Open在1992年聯合出版了一個規(guī)范,該規(guī)范定義了調用級界面(CallLevelInterface,CLI)標準。1993年,MS公司推出了ODBC2.0規(guī)范,并于1994年出版了ODBC2.0SDK。MS在1998年出版的ODBC3.0規(guī)范中,作了一些修改,目的是更進一步接近SQL標準。SQL3(即SQL99)的第三部分介紹了SQL/CLI。
ODBCAPI與SQLCLI 之間的協調在ODBC3.0版本和SQL/CLI中,都建議用戶:廢棄三個分配函數SQLAllocEnv、SQLAllocConnect和SQLAllocStmt, 而只使用一個函數SQLAllocHandle,廢棄三個釋放函數SQLFreeEnv、SQLFreeConnect和SQLFreeStmt, 而只使用一個函數SQLFreeHandle。SQLCLI與嵌入式SQL 的比較與嵌入式SQL相比,SQLCLI有下列四個優(yōu)點:(1)標準化、通用化。將數據源的差異屏蔽在驅動程序實現之中,改善了應用程序的可移植性。(2)能支持應用程序并發(fā)訪問不同數據源或同一數據源。對于不同的訪問有不同的連接句柄,彼此不會干擾。(3)免除了預編譯步驟,省去了說明游標和操作游標的語句,不需要說明主變量,應用程序中任何變量都可以和數據源交換數據。(4)對訪問數據源的每一步驟,在執(zhí)行時都提供相應的診斷信息,便于調試;而在嵌入式SQL中,只有在訪問結束時才提供診斷信息。SQLCLI與嵌入式SQL 的比較在嵌入式SQL中,SQL函數是編譯執(zhí)行,比起從DLL動態(tài)調用執(zhí)行,性能要好。但對于訪問多數據源或數據源變化大的應用程序,選用SQLCLI無疑是上策。SQLCLI為應用程序訪問數據源提供了一個標準接口,目前已為工業(yè)界和用戶廣泛接受。在20世紀90年代,為了比較系統(tǒng)地解決分布異構環(huán)境下的計算、互操作、互訪問等系統(tǒng)集成問題,相繼出現了以對象為基礎的分布對象計算模型,其中著名的有COM/DCOM(ComponentObjectModel/DistributedCOM),CORBA(CommonObjectRequestBrokerArchitecture)和JavaBeans。這三個模型已在工業(yè)界流行,并且成為工業(yè)標準或事實上的工業(yè)標準,可望逐步發(fā)展成為國際標準。SQL/CLI的應用API是微軟公司ODBC技術的術語,是非SQL名稱。在SQL標準中,稱為“調用層接口”(CallLevelInterface,簡記為CLI)。SQL/CLI是ODBC技術的延續(xù)。下面介紹SQL/CLI的使用,用C語言作為宿主語言。CLI定義了一套可以從宿主語言調用的公共函數,每一個函數具有一個名稱和一個要求的算法(當使用這個函數調用時,DBMS應該做什么)。在SQL3的第三部分介紹了SQL/CLI。SQL/CLI的應用使用SQL/CLI時,有必要將宿主程序與數據庫交互的有關信息記錄在運行時數據結果中。此信息保存在以下四種類型的記錄中,表示為C數據類型中的復合結構(Struct):●環(huán)境記錄(EnvironmentRecord):用作為一個容器,設置環(huán)境信息,以保存一個或多個數據庫連接?!襁B接記錄(ConnectionRecord):保存一個特定數據庫連接所需的信息,表示應用系統(tǒng)與數據源之間的連接。●語句記錄(StatementRecord):保存一個SQL語句所需的信息。●描述記錄(DescriptionRecord):保存元組或參數的有關信息,如元組中的屬性個數及其類型,或某個函數調用中的參數個數及其類型。SQL/CLI的應用若要創(chuàng)建記錄,需要使用如下SQL/CLI函數:
SQLAllocHandle(<handle_type>,<handle_1>, <handle_2>)函數中參數的含義如下:<handle_type>指示所創(chuàng)建記錄的類型。此參數可能的 值為關鍵字SQL_HANDLE_ENV、 SQL_HANDLE_DBC、SQL_HANDLE_STMT、 SQL_HANDLE_DESC。<handle_1>指示了新句柄在哪個容器中創(chuàng)建。<handle_2>是指向新創(chuàng)建的<handle_type>類型記錄的 指針(句柄)。SQL/CLI的應用例10.3下面的程序段是讀?。ㄝ斎耄┠硨W生的學號,然后查詢關系S,并打印該學生的姓名和年齡。
0)#includesqlcli.h; 1)voidprintAge(){ 2)SQLHSTMTstmt1; 3)SQLHDBCcon1; 4)SQLHENVenv1; 5)SQLRETURNret1,ret2,ret3,ret4; 6)ret1=SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE,&env1); 7)if(!ret1)ret2=SQLAllocHandle( SQL_HANDLE_DBC,env1,&con1)elseexit;SQL/CLI的應用 8)if(!ret2)ret3=SQLConnect(con1,〞dbs〞, SQL_NTS,〞js〞,SQL_NTS, 〞xyz〞,SQL_NTS)elseexit;9)if(!ret3)ret4=SQLAllocHandle( SQL_HANDLE_STMT,con1,&stmt1)elseexit; 10)SQLPrepare(stmt1,〞selectSNAME,AGEfromS whereS#=?〞,SQL_NTS); 11)prompt(〞EnteraStudentNumber:〞,s#); 12)SQLBindParameter(stmt1,1,SQL_CHAR,&s#,5, &fetchlen1); 13)ret1=SQLExecute(stmt1);SQL/CLI的應用
14)if(!ret1){ 15) SQLBindCol(stmt1,1,SQL_CHAR,&sname, 9,&fetchlen1); 16) SQLBindCol(stmt1,2,SQL_SMALLINT,&age, 2,&fetchlen2); 17) ret2=SQLFetch(stmt1); 18) if(!ret2)printf(s#,sname,age); 19) elseprintf(〞TheStudentNumberdosnot exist: 〞,s#); 20) } 21)}SQL/CLI的應用例10.4下面的程序段先讀取(輸入)一個年齡值,然后檢索符合這個年齡的學生。接著用一個循環(huán)處理各個學生記錄,并打印各學生的姓名和性別。
0)#includesqlcli.h; 1)voidprintAgeStudents(){ 2)SQLHSTMTstmt1; 3)SQLHDBCcon1; 4)SQLHENVenv1; 5)SQLRETURNret1,ret2,ret3,ret4; 6)ret1=SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE,&env1); 7)if(!ret1)ret2=SQLAllocHandle( SQL_HANDLE_DBC,env1,&con1)elseexit;SQL/CLI的應用
8)if(!ret2)ret3=SQLConnect(con1,〞dbs〞, SQL_NTS,〞js〞,SQL_NTS, 〞xyz〞,SQL_NTS)elseexit; 9)if(!ret3)ret4=SQLAllocHandle( SQL_HANDLE_STMT,con1,&stmt1)elseexit; 10)SQLPrepare(stmt1,〞selectSNAME,SEXfromS whereAGE=?〞,SQL_NTS); 11)prompt(〞EnteraAge:〞,age); 12)SQLBindParameter(stmt1,1,SQL_SMALLINT, &age,2,&fetchlen1); 13)ret1=SQLExecute(stmt1);SQL/CLI的應用
14)if(!ret1){ 15) SQLBindCol(stmt1,1,SQL_CHAR,&sname, 9,&fetchlen1); 16) SQLBindCol(stmt1,2,SQL_CHAR,&SEX, 2,&fetchlen2); 17) ret2=SQLFetch(stmt1); 18) while(!ret2){19) printf(sname,sex); 20) ret2=SQLFetch(stmt1); 21) } 22) } 23)}JDBCJDBC簡介JDBC驅動類型JDBCAPIJDBC的發(fā)展JDBC簡介Java于1995年5月正式公布,數據庫應用程序中,沒有一個Java語言的API,編程人員不得不在Java程序中加入C語言的ODBC函數調用。很多Java的優(yōu)秀特性無法充分發(fā)揮平臺無關性面向對象特性JDBC是為在JavaApplet和應用程序中訪問關系數據庫而設計的API類。JDBC獨立于平臺和數據庫。在JDBC規(guī)范中,提供了SQL數據庫訪問的JAVA方法。JDBC應用框架JDBC兩層模型JDBC三層模型JDBC與ODBCODBCAPI是C的庫函數,在JAVA程序中不能直接使用。非面型對象大量指針因為語言本身的差異,不能將ODBCCAPI逐字翻譯為JAVAAPI。使用JDBC使應用程序保持“純JAVA”的可移植性等。JDBC驅動類型Java應用程序JDBC驅動管理器JDBC網絡驅動JDBC-ODBC橋ODBC和數據庫驅動數據庫驅動A數據庫驅動B專用數據庫協議JDBC中間協議JDBCAPIJDBC驅動APIJDBC實現JDBC驅動類型JDBC-ODBC橋(JDBC-ODBCbridge)JDBC調用ODBCLibaryODBCDriverDatabase
。要求ODBC代碼、client端代碼都要在客戶機上安裝適合企業(yè)網,但由于效率較低不適合大量數據訪問的應用,也不適合Internet應用,因為不能要求所有客戶都安裝ODBC。問題:Java應用程序具有平臺相關性,安全性降低,可移植性差。JDBC驅動類型本地API驅動:把客戶機API上的JDBC調用轉換為Oracle、Sybase、DB2等DBMS本地API調用執(zhí)行效率高于JDBC-ODBC橋JDBC調用數據庫的Client端API,也需要在客戶機上安裝代碼。不適合InternetJDBC驅動類型網絡協議完全JAVA驅動:Application>JdbcDriver>javamiddleware>JDBCDriver>Databasejdbc先把對數局庫的訪問請求傳遞給網絡上的中間件服務器中間件服務器再把請求翻譯為符合數據庫規(guī)范的調用,再把這種調用傳給數據庫服務器果中間件服務器也是用java開發(fā)的,那么在在中間層也可以使用1,2型jdbc驅動JDBC驅動類型網絡協議完全JAVA驅動:驅動是基于server的,不需要在客戶端加載數據庫廠商提供的代碼庫,可以設計的很小,多了一個中間層傳遞數據,它的執(zhí)行效率還不是最好JDBC驅動類型本地協議完全JAVA驅動JDBC調用直接轉換為DBMS所使用的網絡協議的請求Application>Jdbc>databaseengine>database驅動完全由java實現,實現了平臺獨立性效率最高適合Internet上單一數據庫的工作組情形JDBCAPI功能建立與數據庫的連接發(fā)送SQL語句處理結果JDBCAPI類類型 JDBC類驅動程序管理Java.sql.Driverjava.sql.DriverManagerjava.sql.DrivePropertyInfo數據庫連接Java.sql.ConnectionSQL語句java.sql.Statementjava.sql.PreparedStatementjava.sql.CallableStatement數據java.sql.ResultSet錯誤java.sql.SQLExceptionjava.sql.SQLWarningJDBC類層次驅動程序管理器連接連接連接語句語句可調用語句準備語句executeUpdate()executeQuery()execute()getMoreResults()結果組元數據
數據getResultsSet()……建立與數據庫的連接驅動程序管理Java.sql.Driver:每個數據庫驅動程序類都要實現的接口Java.Sql.DriverPropertyInfo:驅動程序和連接建立需要的特性Java.sql.DriverManager:提供驅動程序需要的服務,包括加載驅動程序,驅動相應驅動程序建立連接等從系統(tǒng)屬性java.sql中讀取Driver的類名,并一一注冊。在程序中使用Class.forName()方法動態(tài)裝載并注冊DriverDriverManager.getConnection()與數據庫建立連接傳送SQL語句在數據庫連接上創(chuàng)建Statement對象,將各種SQL語句發(fā)送到所連接的數據庫。Statementstmt=con.createStatement();ResultSetrs=stmt.executeQuery(“SELECTa,b,cFROMTable1”);對于多次執(zhí)行但參數不同的SQL語句,可以使用PreparedStatement對象。使用CallableStatement對象調用數據庫上的存儲過程。處理結果集結果集是查詢語句返回的數據庫記錄的集合。在結果集中通過游標(Cursor)控制具體記錄的訪問。SQL數據類型與JAVA數據類型的轉換根據SQL數據類型的不同,使用不同的方法讀取數據。/*處理結果集rs*/while(rs.next()){
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025中國大唐集團限公司重慶分公司所屬石柱發(fā)電公司招聘46人高頻重點提升(共500題)附帶答案詳解
- 2025下半年江蘇省南通市事業(yè)單位考試招聘高頻重點提升(共500題)附帶答案詳解
- 2025下半年四川內江市市中區(qū)部分事業(yè)單位招聘21人歷年高頻重點提升(共500題)附帶答案詳解
- 2025上海城建城市運營(集團)限公司招聘51人高頻重點提升(共500題)附帶答案詳解
- 2025上半年廣東省深圳市事業(yè)單位招聘1420人歷年高頻重點提升(共500題)附帶答案詳解
- 2025上半年四川自貢市沿灘區(qū)事業(yè)單位招聘工作人員67人歷年高頻重點提升(共500題)附帶答案詳解
- 2025上半年四川省瀘州市江陽區(qū)事業(yè)單位考試招聘125人高頻重點提升(共500題)附帶答案詳解
- 2025“才聚齊魯成就未來”山東南郊集團投資限公司招聘2人高頻重點提升(共500題)附帶答案詳解
- 防護頭盔勞動防護用品管理細則
- 2024年電子設備租賃及售后服務合同范本2篇
- 植物生長與環(huán)境課程教案
- 歌廳消防安全管理制度
- 獨立基礎計算(帶公式)
- 基站電力維護管理制度
- 《雪地尋蹤》選擇題及答案
- 2023年NPI產品工程師年度總結及下年工作展望
- 中醫(yī)科工作總結及計劃
- 窗簾采購投標方案(技術標)
- 2023-2024年人教版三年級上冊數學期末應用題專題訓練
- 職業(yè)學校消防安全課件
- 基于多元回歸的計量經濟學論文
評論
0/150
提交評論