版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第13章數(shù)據(jù)庫(kù)訪問(wèn)接口本章介紹嵌入式MySQL、ODBC、OLEDB、ADO和JDBC等常用的數(shù)據(jù)庫(kù)訪問(wèn)接口的概念和用法。數(shù)據(jù)庫(kù)系統(tǒng)原理及應(yīng)用13.1嵌入式MySQL13.2ODBC13.3OLEDB13.4ADO主要內(nèi)容13.5JDBC嵌入式MySQL13.113.1嵌入式MySQL嵌入式MySQL是指將MySQL語(yǔ)句嵌入到程序設(shè)計(jì)語(yǔ)言中使用,即用某種程序設(shè)計(jì)語(yǔ)言(例如C,C++,Java等)編寫(xiě)程序,該程序的某些函數(shù)或某些語(yǔ)句實(shí)際是MySQL語(yǔ)句。被嵌入的程序設(shè)計(jì)語(yǔ)言稱(chēng)為宿主語(yǔ)言,簡(jiǎn)稱(chēng)為主語(yǔ)言。13.1.1嵌入式MySQL和獨(dú)立MySQL的區(qū)別嵌入式服務(wù)器需要通過(guò)編程訪問(wèn)和操作,即訪問(wèn)嵌入式MySQL服務(wù)器需要通過(guò)程序設(shè)計(jì)語(yǔ)言而不是SQL查詢命令。0102嵌入式服務(wù)器沒(méi)有使用完整的身份驗(yàn)證機(jī)制,而且在默認(rèn)的情況下還是禁用的。13.1.2嵌入式MySQL與宿主語(yǔ)言的接口嵌入式程序庫(kù)提供了許多通過(guò)API(ApplicationProgrammingInterface,應(yīng)用程序接口)訪問(wèn)MySQL數(shù)據(jù)庫(kù)系統(tǒng)的函數(shù)。通過(guò)API,宿主系統(tǒng)通過(guò)編程可以充分利用MySQL服務(wù)器的強(qiáng)大功能。13.1.3嵌入式MySQL的使用在C語(yǔ)言中,應(yīng)導(dǎo)入mysql.h庫(kù)1)啟動(dòng)與退出MySQL13.1.3嵌入式MySQL的使用[例13-1]:連接MySQL服務(wù)器。13.1.3嵌入式MySQL的使用2)查詢語(yǔ)句mysql_query(mysqlmysql_name,char[]“query_operation”)[例13-2]:讀取所有學(xué)生的學(xué)號(hào)及名字。13.1.3嵌入式MySQL的使用[例13-3]:向student表中插入一行數(shù)據(jù)。13.1.3嵌入式MySQL的使用[例13-4]:修改數(shù)據(jù)ODBC13.213.2ODBCODBC(OpenDatabaseConnectivity,開(kāi)放數(shù)據(jù)庫(kù)互連)是微軟公司開(kāi)放服務(wù)結(jié)構(gòu)中有關(guān)數(shù)據(jù)庫(kù)的一個(gè)組成部分,它建立了一組規(guī)范,并提供了一組對(duì)數(shù)據(jù)庫(kù)訪問(wèn)的標(biāo)準(zhǔn)API(應(yīng)用程序編程接口)。這些API利用SQL來(lái)完成其大部分任務(wù)。ODBC本身也提供了對(duì)SQL語(yǔ)言的支持,用戶可以直接將SQL語(yǔ)句送給ODBC。一組數(shù)據(jù)的位置,可以使用ODBC驅(qū)動(dòng)程序訪問(wèn)該位置。13.2.1ODBC體系結(jié)構(gòu)數(shù)據(jù)源名(DSN)應(yīng)用程序ODBC管理器ODBCAPI(MySQL)驅(qū)動(dòng)程序管理器ODBC驅(qū)動(dòng)程序數(shù)據(jù)源應(yīng)用層ODBC層數(shù)據(jù)層ODBC的體系結(jié)構(gòu)1)數(shù)據(jù)層數(shù)據(jù)源實(shí)際上是一種數(shù)據(jù)連接的抽象,指定了數(shù)據(jù)庫(kù)位置和數(shù)據(jù)庫(kù)類(lèi)型等信息。數(shù)據(jù)源有系統(tǒng)數(shù)據(jù)源、用戶數(shù)據(jù)源和文件數(shù)據(jù)源三種類(lèi)型。應(yīng)用程序如果要通過(guò)ODBC訪問(wèn)一個(gè)數(shù)據(jù)庫(kù),則首先要?jiǎng)?chuàng)建一個(gè)數(shù)據(jù)源,主要工作是指定數(shù)據(jù)源,使其關(guān)聯(lián)一個(gè)目的數(shù)據(jù)庫(kù)以及相應(yīng)的ODBC驅(qū)動(dòng)程序。13.2.1ODBC體系結(jié)構(gòu)數(shù)據(jù)源名(DSN)應(yīng)用程序ODBC管理器ODBCAPI(MySQL)驅(qū)動(dòng)程序管理器ODBC驅(qū)動(dòng)程序數(shù)據(jù)源應(yīng)用層ODBC層數(shù)據(jù)層ODBC的體系結(jié)構(gòu)2)應(yīng)用層應(yīng)用程序(Application)是用程序設(shè)計(jì)語(yǔ)言(如C語(yǔ)言等)編寫(xiě)的程序。使用ODBC接口的應(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)。13.2.1ODBC體系結(jié)構(gòu)數(shù)據(jù)源名(DSN)應(yīng)用程序ODBC管理器ODBCAPI(MySQL)驅(qū)動(dòng)程序管理器ODBC驅(qū)動(dòng)程序數(shù)據(jù)源應(yīng)用層ODBC層數(shù)據(jù)層ODBC的體系結(jié)構(gòu)3)ODBC層(1)ODBCAPI訪問(wèn)數(shù)據(jù)庫(kù)的接口(2)ODBC管理器其主要任務(wù)是管理安裝的ODBC驅(qū)動(dòng)程序和管理數(shù)據(jù)源。(3)ODBC驅(qū)動(dòng)程序管理器應(yīng)用程序不能直接調(diào)用ODBC驅(qū)動(dòng)程序,只可調(diào)用ODBC驅(qū)動(dòng)程序管理器提供的ODBCAPI函數(shù),再由ODBC驅(qū)動(dòng)程序管理器負(fù)責(zé)把相應(yīng)的ODBC驅(qū)動(dòng)程序加載到內(nèi)存中,同時(shí)把應(yīng)用程序訪問(wèn)數(shù)據(jù)的請(qǐng)求傳送給ODBC驅(qū)動(dòng)程序。(4)ODBC驅(qū)動(dòng)程序所有的數(shù)據(jù)庫(kù)操作由對(duì)應(yīng)的數(shù)據(jù)庫(kù)管理系統(tǒng)的ODBC驅(qū)動(dòng)程序完成。ODBC驅(qū)動(dòng)程序具體負(fù)責(zé)把SQL請(qǐng)求傳送到數(shù)據(jù)源的數(shù)據(jù)庫(kù)管理系統(tǒng)中,再把操作結(jié)果返回到ODBC驅(qū)動(dòng)程序管理器。后者再把結(jié)果傳送至客戶端的應(yīng)用程序。13.2.2建立ODBC數(shù)據(jù)源(1)在MySQL官網(wǎng)上,根據(jù)自己計(jì)算機(jī)的配置下載并安裝ODBC,推薦下載MSIInstaller。(2)在“控制面板”→“系統(tǒng)和安全”→“管理工具”中找到“ODBC數(shù)據(jù)源管理器”,假設(shè)要建立一個(gè)系統(tǒng)ODBC數(shù)據(jù)源,選擇“dBASEFiles”選項(xiàng)卡,然后單擊“添加”按鈕13.2.2建立ODBC數(shù)據(jù)源(4)選擇要連接的數(shù)據(jù)庫(kù)管理系統(tǒng)的驅(qū)動(dòng)程序。13.2.2建立ODBC數(shù)據(jù)源(5)為數(shù)據(jù)源命名,并指定要連接到的數(shù)據(jù)庫(kù)服務(wù)器的名字和端口,如果使用本地服務(wù)器時(shí)可輸入localhost。在user和password中輸入用戶名和密碼,在database下拉列表中指定要連接的數(shù)據(jù)庫(kù)服務(wù)器的名字。單擊“OK”按鈕。13.2.3在VisualStudio2019中使用MySQLODBC(1)安裝MySQLODBC并配置完畢后,重啟VisualStudio,點(diǎn)擊視圖->服務(wù)器資源管理器(2)然后點(diǎn)擊數(shù)據(jù)連接->添加連接OLEDB13.313.3.1OLEDB概述Microsoft推出的一致數(shù)據(jù)訪問(wèn)(UniversalDataAccess,UDA)技術(shù)為關(guān)系型數(shù)據(jù)和非關(guān)系型數(shù)據(jù)提供了一致的訪問(wèn)接口,為企業(yè)級(jí)Intranet應(yīng)用多層軟件結(jié)構(gòu)提供了數(shù)據(jù)接口標(biāo)準(zhǔn)。一致數(shù)據(jù)訪問(wèn)技術(shù)建立在Microsoft的組件對(duì)象模型(ComponentObjectModel,COM)基礎(chǔ)上,它包括一組COM組件程序,組件與組件之間或者組件與客戶程序之間通過(guò)標(biāo)準(zhǔn)的COM接口進(jìn)行通訊。13.3.1OLEDB概述1)ADO和OLEDB一致數(shù)據(jù)訪問(wèn)包括兩層軟件接口,分別為動(dòng)態(tài)數(shù)據(jù)對(duì)象(ActiveDataObject,ADO)和對(duì)象連接與嵌入的數(shù)據(jù)庫(kù)(ObjectLinkedandEmbedDatabase,OLEDB)。ADO提供了高層軟件接口,可在各種腳本語(yǔ)言(Script)或一些宏語(yǔ)言中直接使用。OLEDB是一系列直接處理數(shù)據(jù)的接口,它建立在COM之上,是Microsoft數(shù)據(jù)訪問(wèn)的基礎(chǔ),ADO接口也是建立在它的基礎(chǔ)之上。13.3.1OLEDB概述2)OLEDB的COM對(duì)象OLEDB的COM對(duì)象主要有DataSource(數(shù)據(jù)源)對(duì)象:數(shù)據(jù)提供者,負(fù)責(zé)管理用戶權(quán)限、建立與數(shù)據(jù)源的連接等初始操作。Session(會(huì)話)對(duì)象:提供事務(wù)控制機(jī)制。Command(命令)對(duì)象:支持?jǐn)?shù)據(jù)使用者執(zhí)行各種數(shù)據(jù)操作,如查詢、
修改等。Rowset(行集)對(duì)象:提供了數(shù)據(jù)的抽象表示,是應(yīng)用程序主要的操作對(duì)象。它可以是命令執(zhí)行的結(jié)果,也可以由會(huì)話對(duì)象產(chǎn)生。13.3.2使用OLEDB客戶模板開(kāi)發(fā)應(yīng)用程序
直接使用OLEDB的對(duì)象和接口設(shè)計(jì)數(shù)據(jù)庫(kù)應(yīng)用程序需要書(shū)寫(xiě)大量的代碼。為了簡(jiǎn)化程序設(shè)計(jì),VisualC++提供了ATL模板用于設(shè)計(jì)OLEDB數(shù)據(jù)應(yīng)用程序和數(shù)據(jù)提供程序。利用ATL模板可以很容易地將OLEDB與MFC結(jié)合起來(lái),使數(shù)據(jù)庫(kù)的參數(shù)查詢等復(fù)雜的編程得到簡(jiǎn)化。ADO13.413.4.1ADO概述動(dòng)態(tài)數(shù)據(jù)對(duì)象(ActiveXDataObjects,ADO)是介于OLEDB底層接口和應(yīng)用程序之間的高層接口集。ADO適合于客戶/服務(wù)器(Client-Server,C/S)系統(tǒng)和基于Web的應(yīng)用。ADO對(duì)象模型的主體對(duì)象Connection對(duì)象Command對(duì)象Recordset對(duì)象。13.4.2Connection對(duì)象用戶必須首先創(chuàng)建一個(gè)Connection對(duì)象,然后再使用其他的對(duì)象來(lái)訪問(wèn)數(shù)據(jù)庫(kù)。1)Connection對(duì)象的主要屬性ConnectionString:用于指定連接到的數(shù)據(jù)源名稱(chēng)Provider:連接著使用的OLEDB提供者。ConnectionTimeOut:執(zhí)行Open方法之后等待建立連接的描述,默認(rèn)值為15秒。State:表示Connection對(duì)象是打開(kāi)還是關(guān)閉的常量。adStateClosed,表示對(duì)象是關(guān)閉的,是默認(rèn)值;adStateOpen表示對(duì)象是打開(kāi)的;adStateConnection表示Recordset對(duì)象正在連接;adStateExcuting表示Recordset對(duì)象正在執(zhí)行;adStateFetching表示正在讀取Recordset對(duì)象的數(shù)據(jù)記錄。13.4.2Connection對(duì)象2)Connection對(duì)象的主要方法Open:打開(kāi)帶有數(shù)據(jù)源的連接Close:終止與數(shù)據(jù)源的連接Execute:沒(méi)有建立Command對(duì)象的情況下執(zhí)行連接中的一個(gè)命令。13.4.2Connection對(duì)象3)使用Connection對(duì)象的步驟(1)設(shè)置ConnectionString的連接屬性[例13-5]:定義一個(gè)數(shù)據(jù)源名稱(chēng)為cardmanagement的MySQL數(shù)據(jù)源,用戶名為Person,口令為111111的連接。其連接字符串設(shè)置如下:DimcnASADODB.ConnectionSetcn=NewADODB.Connectioncn.ConnectionString=”DSN=數(shù)據(jù)名稱(chēng);Database=cardmanagement;UID=Person;PWD=111111”cn.ConnectionString=”P(pán)rovider=SQLOLEDB.1;UID=Person;PWD=111111;InitialCatalog=cardmanagement;DataSource=數(shù)據(jù)庫(kù)服務(wù)器名稱(chēng)”其中,“Provider=SQLOLEDB.1”表示要使用MicrosoftSQLServer自身的OLEDB提供者。13.4.2Connection對(duì)象(2)使用Open建立連接[例13-5]中使用Open的格式為:cn.Open。(3)使用Close斷開(kāi)連接[例13-5]中使用Close的格式為:cn.Close。一般情況下,Close只是斷開(kāi)了連接,并沒(méi)有將Connection對(duì)象從內(nèi)存中刪除,因此,在關(guān)閉之后可使用Open再次打開(kāi)它。若要將對(duì)象從內(nèi)存中刪除,應(yīng)該使用Set語(yǔ)句,基本的語(yǔ)法格式為:Set對(duì)象名=Nothing13.4.3Command對(duì)象1)Command對(duì)象的主要屬性ActiveConnection:指定當(dāng)前使用的連接。CommandText:命令的文本表示。CommandType:指定要執(zhí)行的命令的類(lèi)型,與CommandText屬性的內(nèi)容對(duì)應(yīng)。其取值如下:CmdText指定CommandText的內(nèi)容是一個(gè)文本,即SQL語(yǔ)句;adCmdTable指定CommandText的內(nèi)容是一個(gè)表名;adCmdStoredProc指定CommandText的內(nèi)容是一個(gè)存儲(chǔ)過(guò)程;adCmdUnknown是默認(rèn)值,表示命令類(lèi)型未知。13.4.3Command對(duì)象2)Command對(duì)象的主要方法Command對(duì)象的最主要方法是Execute方法,執(zhí)行CommandText屬性中指定的命令。其執(zhí)行結(jié)果有兩種類(lèi)型:當(dāng)執(zhí)行的查詢類(lèi)語(yǔ)句返回查詢結(jié)果,并將結(jié)果放置在Recordset對(duì)象中;當(dāng)執(zhí)行其他非查詢類(lèi)語(yǔ)句時(shí),如CREATE、INSERT、DELETE等操作時(shí),不返回結(jié)果。13.4.3Command對(duì)象[例13-6]:在[例13-5]的基礎(chǔ)上利用Command對(duì)象查詢Student中的所有記錄。//聲明對(duì)象DimcnASADODB.ConnectionDimcmASADODB.CommandDimrsASADODB.Recordset//建立連接Setcn=NewADODB.Connectioncn.ConnectionString=”P(pán)rovider=SQLOLEDB.1;UID=Person;PWD=111111;InitialCatalog=cardmanagement;DataSource=數(shù)據(jù)庫(kù)服務(wù)器名稱(chēng)”cn.Open//執(zhí)行命令Setcm=NewADODB.CommandSetcm.ActiveConnection=cncm.CommandText=”SELECT*FROMStudent”Setrs=cm.Execute13.4.4Recordset對(duì)象Recordset對(duì)象是指從數(shù)據(jù)提供者那里獲取的數(shù)據(jù)記錄集。Recordset對(duì)象的主要功能是建立記錄集,并支持對(duì)記錄集中的數(shù)據(jù)進(jìn)行瀏覽、更改、過(guò)濾等各種操作。1)Recordset對(duì)象的主要屬性CursorType:描述記錄集中使用的游標(biāo)類(lèi)型的常量。CursorLocation:描述記錄集中使用的游標(biāo)位置的常量。LockType:控制編輯過(guò)程中設(shè)置的加鎖類(lèi)型。ActiveConnection:指定創(chuàng)建Recordset對(duì)象所屬的Connection對(duì)象。Source:設(shè)置Recordset對(duì)象中數(shù)據(jù)的來(lái)源。BookMark:記錄集中當(dāng)前記錄的唯一表示。如果當(dāng)前行移動(dòng)到記錄集的第一條記錄的前邊,則BOF為真;如果當(dāng)前行移動(dòng)到記錄集的最后一行記錄的后邊,則EOF為真。RecordCount:記錄集中記錄的個(gè)數(shù)。Sort:將記錄集按字段排序。Filter:允許用戶選擇記錄集中的部分?jǐn)?shù)據(jù)。其基本的語(yǔ)法格式為:
Recordset對(duì)象名.Filter=”選擇表達(dá)式”13.4.4Recordset對(duì)象2)Recordset對(duì)象的主要方法(1)Move方法組13.4.4Recordset對(duì)象(2)數(shù)據(jù)操作方法組13.4.4Recordset對(duì)象3)使用Recordset對(duì)象ADO對(duì)象模型運(yùn)行用戶直接打開(kāi)一個(gè)Recordset對(duì)象,或者從Connection對(duì)象和Command對(duì)象中創(chuàng)建一個(gè)Recordset對(duì)象。(1)使用Command對(duì)象的Execute創(chuàng)建Recordset對(duì)象,基本語(yǔ)法格式為:
Setrs=cm.Execute(2)使用Connection對(duì)象的Execute創(chuàng)建Recordset對(duì)象,基本語(yǔ)法格式為:
Setrs=cn.Execute(“SELECT*FROMTable_Student”)(3)使用Recordset對(duì)象的Open創(chuàng)建Recordset對(duì)象,基本語(yǔ)法格式為:
rs.Open13.4.5使用ADO對(duì)象模型訪問(wèn)數(shù)據(jù)庫(kù)使用ADO對(duì)象訪問(wèn)數(shù)據(jù)庫(kù)的一般步驟為:(1)創(chuàng)建Connection對(duì)象與數(shù)據(jù)源建立連接。(2)創(chuàng)建Command對(duì)象,設(shè)置該對(duì)象的活動(dòng)連接為上一步的Connection對(duì)象,設(shè)置命令文本屬性為訪問(wèn)數(shù)據(jù)源所需的命令(如SELECT、INSERT、UPDATE等)。(3)使用Command對(duì)象的Execute方法執(zhí)行命令,如果是查詢命令,該方法會(huì)返回一個(gè)Recordset對(duì)象。(4)使用Recordset對(duì)象操作記錄。13.4.5使用ADO對(duì)象模型訪問(wèn)數(shù)據(jù)庫(kù)[例13-7]:利用ADO對(duì)象模型訪問(wèn)校園卡管理系統(tǒng)的數(shù)據(jù)庫(kù)cardmanagement,并且查詢Student表。DimcnASNewADODB.ConnectionDimcmASNewADODB.CommandDimrsASNewADODB.Recordsetcn.ConnectionString=”P(pán)rovider=SQLOLEDB.1;UID=Person;PWD=111111;InitialCatalog=cardmanagement;DataSource=(local)”cn.Opencm.ActiveConnection=cncm.CommandType=adCmdTablecm.CommandText=”Student”Setrs=cm.ExecuteJDBC13.513.5.1JDBC概述Java數(shù)據(jù)庫(kù)連接(JavaDataBaseConnectivity,JDBC)是SUN公司為了統(tǒng)一對(duì)數(shù)據(jù)庫(kù)的操作,定義的一套Java操作數(shù)據(jù)庫(kù)的接口。JDBC由數(shù)據(jù)庫(kù)廠商去實(shí)現(xiàn),開(kāi)發(fā)人員只需要學(xué)習(xí)JDBC接口,并通過(guò)JDBC加載具體的驅(qū)動(dòng),就可以操作數(shù)據(jù)庫(kù)。定義一個(gè)數(shù)據(jù)庫(kù)連接的全部工作是由Java代碼通過(guò)JDBC驅(qū)動(dòng)程序完成的。13.5.1JDBC概述JDBC操作的基本流程1)加載數(shù)據(jù)庫(kù)驅(qū)動(dòng) Class.forName("com.mysql.cj.jdbc.Driver");2)取得數(shù)據(jù)庫(kù)連接[例13-8]:用DriverManager連接數(shù)據(jù)庫(kù)。Stringdriver,urluser,pwd;Connectionconn;url=“jdbc:mysql://localhost:3306/cardmanagement?serverTimezone=UTC”;user="root";pwd="123456";conn=DriverManager.getConnection(url,user,pwd);13.5.1JDBC概述3)執(zhí)行SQL語(yǔ)句(1)用Statement執(zhí)行SQL語(yǔ)句Stringsql;Statementsm=cn.createStatement();sm.executeQuery(sql);//執(zhí)行數(shù)據(jù)查詢語(yǔ)句sm.executeUpdate(sql);//執(zhí)行數(shù)據(jù)更新語(yǔ)句statement.close();(2)用PreparedStatement執(zhí)行SQL語(yǔ)句Stringsql;sql=“insertintouser(id,name)values(?,?)”;PreparedStatementps=cn.prepareStatement(sql);ps.setInt(1,xxx);ps.setString(2,xxx);…ResultSetrs=ps.executeQuery();//查詢INTc=ps.executeUpdate();//更新13.5.1JDBC概述4)處理執(zhí)行結(jié)果
查詢語(yǔ)句,返回記錄集ResultSet。
更新語(yǔ)句,返回?cái)?shù)值,表示該更新影響的記錄數(shù)。
ResultSet的方法:
(1)next(),將游標(biāo)往后移動(dòng)一行,如果成功返回true;否則返回false。
(2)getInt(“id”)或getString("name"),返回當(dāng)前游標(biāo)下某個(gè)字段的值。5)釋放數(shù)據(jù)庫(kù)連接一般先關(guān)閉ResultSet,然后關(guān)閉Statement或者PreparedStatement,最后關(guān)閉Connection。13.5.2JDBC連接數(shù)據(jù)庫(kù)(1)在MySQL官網(wǎng)上下載MySQLConnection/J驅(qū)動(dòng)包(2)將下載完成的壓縮包解壓,再在IDE中添加路徑。(3)通過(guò)JDBC連接cardmanagement數(shù)據(jù)庫(kù),用importjava.sql.*;導(dǎo)入包第14章
數(shù)據(jù)庫(kù)技術(shù)的新發(fā)展本章介紹數(shù)據(jù)庫(kù)技術(shù)的新發(fā)展,簡(jiǎn)要介紹面向?qū)ο髷?shù)據(jù)庫(kù)、數(shù)據(jù)倉(cāng)庫(kù)及數(shù)據(jù)挖掘、XML數(shù)據(jù)庫(kù)、云數(shù)據(jù)庫(kù)、空間數(shù)據(jù)庫(kù)及NoSQL數(shù)據(jù)庫(kù)等新型數(shù)據(jù)庫(kù)的基本概念,并以Redis為例介紹NoSQL的基本操作。數(shù)據(jù)庫(kù)系統(tǒng)原理及應(yīng)用14.1面向?qū)ο髷?shù)據(jù)庫(kù)p
面向?qū)ο髷?shù)據(jù)庫(kù)(Object
Oriented
DataBase,OODB)是數(shù)據(jù)庫(kù)技術(shù)與類(lèi)、封裝、接口等面向?qū)ο蟪绦蛟O(shè)計(jì)方法相結(jié)合的一種新型數(shù)據(jù)庫(kù)。其數(shù)據(jù)都是以對(duì)象/類(lèi)的形式表示并存儲(chǔ)在面向?qū)ο髷?shù)據(jù)庫(kù)中。p
簡(jiǎn)單來(lái)講,面向?qū)ο髷?shù)據(jù)庫(kù)
=
面向?qū)ο缶幊陶Z(yǔ)言
+
關(guān)系型數(shù)據(jù)庫(kù)特性。在這個(gè)公式里面,面向?qū)ο缶幊陶Z(yǔ)言的三個(gè)特性為繼承、多態(tài)、封裝;而關(guān)系型數(shù)據(jù)庫(kù)特性的三個(gè)特性:實(shí)體完整性、并發(fā)、查詢處理。p
相較于傳統(tǒng)關(guān)系型數(shù)據(jù)庫(kù),面向?qū)ο髷?shù)據(jù)庫(kù)采用了類(lèi)、封裝、接口等面向?qū)ο蟪绦蛟O(shè)計(jì)方法,具有高內(nèi)聚、低耦合的系統(tǒng)結(jié)構(gòu),系統(tǒng)更靈活、更容易擴(kuò)展,而且維護(hù)成本較低。同時(shí),由于其本身就包含程序設(shè)計(jì)的思想,有多種接口,在被其他應(yīng)用軟件調(diào)取數(shù)據(jù)的時(shí)候會(huì)更加方便。14.2數(shù)據(jù)倉(cāng)庫(kù)p
數(shù)據(jù)倉(cāng)庫(kù)是一個(gè)面向主題的、集成的、隨時(shí)間變化的、但信息本身相對(duì)穩(wěn)定的數(shù)據(jù)集合,一般用于對(duì)管理決策過(guò)程的支持。①
面向主題:指數(shù)據(jù)倉(cāng)庫(kù)一般為了某個(gè)明確的主題,其他與此主題無(wú)關(guān)的數(shù)據(jù)一般會(huì)被剔除②
集成:指數(shù)據(jù)倉(cāng)庫(kù)一般是由多個(gè)數(shù)據(jù)源經(jīng)過(guò)抽取,轉(zhuǎn)化,加載至同一個(gè)數(shù)據(jù)源的。③
隨時(shí)間變化:指關(guān)鍵數(shù)據(jù)隱式或顯式的基于時(shí)間變化。④
信息相對(duì)穩(wěn)定:指數(shù)據(jù)裝入以后一般只進(jìn)行查詢操作,不支持?jǐn)?shù)據(jù)庫(kù)的增刪改操作。14.3
XML數(shù)據(jù)庫(kù)pXML數(shù)據(jù)庫(kù)是使用XML(EXtensibleMarkupLanguage,可擴(kuò)展標(biāo)記語(yǔ)言)格式文檔進(jìn)行存儲(chǔ)和查詢等操作的數(shù)據(jù)庫(kù)管理系統(tǒng)。p
XML數(shù)據(jù)庫(kù)是指能管理XML數(shù)據(jù)的數(shù)據(jù)庫(kù)管理系統(tǒng)。p
與傳統(tǒng)數(shù)據(jù)庫(kù)相比,XML數(shù)據(jù)庫(kù)具有以下優(yōu)勢(shì):1、能夠?qū)Π虢Y(jié)構(gòu)化數(shù)據(jù)進(jìn)行有效的存取和管理,如網(wǎng)頁(yè)內(nèi)容2、提供對(duì)標(biāo)簽和路徑的操作。3、便于對(duì)層次化的數(shù)據(jù)進(jìn)行操作。XML數(shù)據(jù)庫(kù)利于文檔存儲(chǔ)和檢索:p
可以用方便實(shí)用的方式檢索文檔,并能夠提供高質(zhì)量的全文搜索引擎;p
能夠存儲(chǔ)和查詢異種的文檔結(jié)構(gòu),提供對(duì)異種信息存取的支持。14.4云數(shù)據(jù)庫(kù)p
云數(shù)據(jù)庫(kù)是指被優(yōu)化或部署到一個(gè)虛擬計(jì)算環(huán)境中的數(shù)據(jù)庫(kù),可以實(shí)現(xiàn)按需付費(fèi)、按需擴(kuò)展、高可用性以及存儲(chǔ)整合等優(yōu)勢(shì)。根據(jù)數(shù)據(jù)庫(kù)類(lèi)型一般分為關(guān)系型數(shù)據(jù)庫(kù)和非關(guān)系型數(shù)據(jù)庫(kù)(NoSQL數(shù)據(jù)庫(kù))。p
云數(shù)據(jù)庫(kù)的特性有:實(shí)例創(chuàng)建快速、支持只讀實(shí)例、讀寫(xiě)分離、故障自動(dòng)切換、數(shù)據(jù)備份、Binlog備份、SQL審計(jì)、訪問(wèn)白名單、監(jiān)控與消息通知等優(yōu)勢(shì)p
輕松部署用戶能夠在RDS控制臺(tái)輕松的完成數(shù)據(jù)庫(kù)申請(qǐng)和創(chuàng)建,RDS實(shí)例在幾分鐘內(nèi)就可以準(zhǔn)備就緒并投入使用。用戶通過(guò)RDS提供的功能完善的控制臺(tái),對(duì)所有實(shí)例進(jìn)行統(tǒng)一管理。p
高可靠云數(shù)據(jù)庫(kù)具有故障自動(dòng)單點(diǎn)切換、數(shù)據(jù)庫(kù)自動(dòng)備份等功能,保證實(shí)例高可用和數(shù)據(jù)安全。免費(fèi)提供7天數(shù)據(jù)備份,可恢復(fù)或回滾至7天內(nèi)任意備份點(diǎn)。p
低成本RDS支付的費(fèi)用遠(yuǎn)低于自建數(shù)據(jù)庫(kù)所需的成本,用戶可以根據(jù)自己的需求選擇不同套餐,使用很低的價(jià)格得到一整套專(zhuān)業(yè)的數(shù)據(jù)庫(kù)支持服務(wù)。14.5空間數(shù)據(jù)庫(kù)p
空間數(shù)據(jù)庫(kù)是指地理信息系統(tǒng)在計(jì)算機(jī)物理存儲(chǔ)介質(zhì)上存儲(chǔ)的與應(yīng)用相關(guān)的地理空間數(shù)據(jù)的總和,一般是以一系列特定結(jié)構(gòu)的文件的形式組織在存儲(chǔ)介質(zhì)之上的。p
空間數(shù)據(jù)庫(kù)描述的主要是地理位置及其相關(guān)信息,例如GPS數(shù)據(jù),氣象數(shù)據(jù)等復(fù)雜的數(shù)據(jù)??臻g數(shù)據(jù)庫(kù)的特點(diǎn)1、數(shù)據(jù)量龐大。2、具有高可訪問(wèn)性
,具有強(qiáng)大的信息檢索和分析能力3、空間數(shù)據(jù)模型復(fù)雜,包括屬性數(shù)據(jù)、圖形圖像數(shù)據(jù)、空間關(guān)系數(shù)據(jù)。4、屬性數(shù)據(jù)和空間數(shù)據(jù)聯(lián)合管理。5、空間實(shí)體的屬性數(shù)據(jù)和空間數(shù)據(jù)可隨時(shí)間而發(fā)生相應(yīng)變化。6、空間數(shù)據(jù)的數(shù)據(jù)項(xiàng)長(zhǎng)度可變,包含一個(gè)或多個(gè)對(duì)象,需要嵌套記錄。7、一種地物類(lèi)型對(duì)應(yīng)一個(gè)屬性數(shù)據(jù)表文件。多種地物類(lèi)型共用一個(gè)屬性數(shù)據(jù)表文件。8、具有空間多尺度性和時(shí)間多尺度性。9、應(yīng)用范圍廣泛。14.6
NoSQL數(shù)據(jù)庫(kù)p
NoSQL僅僅是一個(gè)概念,泛指非關(guān)系型的數(shù)據(jù)庫(kù),區(qū)別于關(guān)系數(shù)據(jù)庫(kù),它們不保證關(guān)系數(shù)據(jù)的ACID特性。p
NoSQL數(shù)據(jù)庫(kù)的產(chǎn)生就是為了解決大規(guī)模數(shù)據(jù)集合多重?cái)?shù)據(jù)種類(lèi)帶來(lái)的挑戰(zhàn),特別是大數(shù)據(jù)應(yīng)用難題。優(yōu)點(diǎn)p
高并發(fā)讀寫(xiě)p
海量數(shù)據(jù)的高效率存儲(chǔ)和訪問(wèn)p
高可擴(kuò)展性和高可用性p
沒(méi)有標(biāo)準(zhǔn)化p
有限的查詢功能(到目前為止)p
最終一致是不直觀的程序缺點(diǎn)14.6
NoSQL數(shù)據(jù)庫(kù)NoSql數(shù)據(jù)庫(kù)的四大分類(lèi)p鍵值(Key-Value)存儲(chǔ)p列存儲(chǔ)p文檔數(shù)據(jù)庫(kù)p圖形數(shù)據(jù)庫(kù)目前,常見(jiàn)的NoSQL數(shù)據(jù)庫(kù)產(chǎn)品有Redis、Riak、Scalaris、HBase、Cassandra、HadoopDB、MongoDB、Neo4J等。14.6
NoSQL數(shù)據(jù)庫(kù)1)鍵值數(shù)據(jù)庫(kù)鍵值(Key-Value)數(shù)據(jù)庫(kù)的數(shù)據(jù)是以鍵值對(duì)的形式存儲(chǔ),其結(jié)構(gòu)形式與哈希(Hash)表比較類(lèi)似,每個(gè)鍵(Key)都對(duì)應(yīng)著一個(gè)值(Value)。Redis是一個(gè)應(yīng)用廣泛的開(kāi)源鍵值數(shù)據(jù)庫(kù)系統(tǒng),具有以下特征:(1)支持多種數(shù)據(jù)類(lèi)型。Redis數(shù)據(jù)庫(kù)支持SET、SORTEDSET、LIST、HASH、STRING等五種數(shù)據(jù)類(lèi)型和一些通用命令。(2)數(shù)據(jù)持久化。采用內(nèi)存和磁盤(pán)異步存儲(chǔ)機(jī)制,數(shù)據(jù)的讀取和寫(xiě)入都在內(nèi)存中進(jìn)行。(3)原子級(jí)操作。Redis的每一個(gè)操作均是原子性的。(4)性能極高。由于數(shù)據(jù)的讀寫(xiě)主要在內(nèi)存中操作,Redis的讀取速度能達(dá)到10萬(wàn)次/秒以上,寫(xiě)入速度能達(dá)到8萬(wàn)次/秒以上。14.6
NoSQL數(shù)據(jù)庫(kù)2)列族數(shù)據(jù)庫(kù)列族(Column-Family)數(shù)據(jù)庫(kù)中數(shù)據(jù)存儲(chǔ)在列族中。列族數(shù)據(jù)庫(kù)與鍵值數(shù)據(jù)庫(kù)的相似之處是數(shù)據(jù)都是鍵仍然存在,但是它們的特點(diǎn)是指向了多個(gè)列。這些列是由列族來(lái)安排的。Hbase是基于Google
BigTable模型開(kāi)發(fā)的分布式存儲(chǔ)系統(tǒng),具有以下特征:(1)稀疏存儲(chǔ)。Hbase中NULL列不會(huì)被存儲(chǔ),不僅節(jié)省了存儲(chǔ)空間,也提高了數(shù)據(jù)查詢效率。(2)多版本數(shù)據(jù)。Hbase中每一個(gè)Value單元數(shù)據(jù)可以有任意多個(gè)版本和數(shù)值。(3)海量數(shù)據(jù)的處理性能。Hbase支持分布式存儲(chǔ),能滿足PB級(jí)數(shù)據(jù)量的讀寫(xiě),適合存儲(chǔ)用戶操作記錄和日志等歷史數(shù)據(jù)。14.6
NoSQL數(shù)據(jù)庫(kù)3)文檔數(shù)據(jù)庫(kù)文檔(Document-Oriented)數(shù)據(jù)庫(kù)中數(shù)據(jù)是以文檔而非數(shù)值的形式存儲(chǔ),通常的格式是JSON、BSON、XML。文檔數(shù)據(jù)庫(kù)與鍵值數(shù)據(jù)庫(kù)在結(jié)構(gòu)上非常相似,都采用鍵值對(duì),但是文檔型數(shù)據(jù)庫(kù)支持嵌套結(jié)構(gòu),可以看作是鍵值數(shù)據(jù)庫(kù)的升級(jí)版。MongoDB是文檔型數(shù)據(jù)庫(kù)中應(yīng)用最為廣泛的產(chǎn)品,具有以下特征:(1)無(wú)需定義表結(jié)構(gòu)。文檔型數(shù)據(jù)庫(kù)中不需要事先定義表結(jié)構(gòu)就可以使用表。(2)數(shù)據(jù)結(jié)構(gòu)靈活。文檔型數(shù)據(jù)庫(kù)中存儲(chǔ)、索引和管理的都是面向文檔或半結(jié)構(gòu)化的數(shù)據(jù),對(duì)數(shù)據(jù)的結(jié)構(gòu)化不作要求。(3)性能優(yōu)越。相較于關(guān)系型數(shù)據(jù)庫(kù),文檔數(shù)據(jù)庫(kù)的讀寫(xiě)性能更加優(yōu)越,尤其是在非索引字段的查詢上效率非常高。14.6
NoSQL數(shù)據(jù)庫(kù)4)圖形數(shù)據(jù)庫(kù)圖形(Graph-Oriented)數(shù)據(jù)庫(kù)中數(shù)據(jù)是以圖的形式存儲(chǔ),實(shí)體與實(shí)體之間的關(guān)系以邊來(lái)表示。這使得圖形數(shù)據(jù)庫(kù)能以更加簡(jiǎn)單的方式表現(xiàn)出關(guān)系數(shù)據(jù)庫(kù)難以表現(xiàn)的復(fù)雜實(shí)體關(guān)系。圖形數(shù)據(jù)庫(kù)的優(yōu)勢(shì)在于對(duì)數(shù)據(jù)關(guān)系的檢索速度快。Neo4J是圖形數(shù)據(jù)庫(kù)中應(yīng)用得最為廣泛的產(chǎn)品,具有以下特征:(1)支持復(fù)雜的圖形算法。當(dāng)數(shù)據(jù)關(guān)系很復(fù)雜時(shí),關(guān)系數(shù)據(jù)庫(kù)需要編寫(xiě)復(fù)雜的SQL語(yǔ)句來(lái)查詢,不僅難以維護(hù)、查詢性能也低;而圖形數(shù)據(jù)庫(kù)中只需要用描述
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年醫(yī)療設(shè)備維修合同
- 2025年倉(cāng)儲(chǔ)租金費(fèi)用合同
- 2025年家居和解協(xié)議書(shū)
- 2025年在線音樂(lè)電臺(tái)服務(wù)合約
- 2025年企業(yè)員工靈活用工管理服務(wù)合同
- 2025年分期付款游泳館會(huì)員購(gòu)買(mǎi)合同
- 2025年度二零二五年度獼猴桃產(chǎn)業(yè)鏈金融服務(wù)平臺(tái)合作合同4篇
- 2025版小公司租車(chē)及車(chē)輛租賃售后服務(wù)合同2篇
- 二零二五版醫(yī)院康復(fù)病區(qū)承包服務(wù)協(xié)議2篇
- 二零二五年度木地板綠色環(huán)保材料采購(gòu)合同4篇
- 光伏自發(fā)自用項(xiàng)目年用電清單和消納計(jì)算表
- 量子計(jì)算在醫(yī)學(xué)圖像處理中的潛力
- 阿里商旅整體差旅解決方案
- 浙江天臺(tái)歷史文化名城保護(hù)規(guī)劃說(shuō)明書(shū)
- 邏輯思維訓(xùn)練500題
- 第八講 發(fā)展全過(guò)程人民民主PPT習(xí)概論2023優(yōu)化版教學(xué)課件
- 實(shí)體瘤療效評(píng)價(jià)標(biāo)準(zhǔn)RECIST-1.1版中文
- 企業(yè)新春茶話會(huì)PPT模板
- GB/T 19185-2008交流線路帶電作業(yè)安全距離計(jì)算方法
- DIC診治新進(jìn)展課件
- 公路工程施工現(xiàn)場(chǎng)安全檢查手冊(cè)
評(píng)論
0/150
提交評(píng)論