国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

淺談數(shù)據(jù)庫(kù)中特殊數(shù)據(jù)存取方法

2017-10-31 22:32魏平

魏平

摘要:數(shù)據(jù)庫(kù)是當(dāng)今計(jì)算機(jī)軟件應(yīng)用和開(kāi)發(fā)最熱門(mén)的分支之一,數(shù)據(jù)庫(kù)應(yīng)用程序是指能夠從數(shù)據(jù)庫(kù)管理系統(tǒng)DBMS獲取數(shù)據(jù)并進(jìn)行操作的程序。本文就是研究數(shù)據(jù)庫(kù)中特殊數(shù)據(jù)的存取,以Visual C++ 6.0和access 2003環(huán)境下的數(shù)據(jù)庫(kù)為例,介紹利用ADO實(shí)現(xiàn)對(duì)圖像和超長(zhǎng)數(shù)據(jù)庫(kù)字段的訪問(wèn),并在研究生信息管理系統(tǒng)中實(shí)現(xiàn)圖像和超長(zhǎng)數(shù)據(jù)字段的存取。

關(guān)鍵詞:BLOB;VC++;ADO;ACCESS

中圖分類(lèi)號(hào):G633.67文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1992-7711(2017)19-092-1

一、Visual C++ 6.0開(kāi)發(fā)數(shù)據(jù)庫(kù)技術(shù)的特點(diǎn)

Visual C++ 6.0提供了多種多樣的數(shù)據(jù)庫(kù)訪問(wèn)技術(shù)——ODBC API、MFC ODBC、DAO、OLEDB、ADO等。這些技術(shù)各有自己的特點(diǎn),但都提供了簡(jiǎn)單、靈活、訪問(wèn)速度快、可擴(kuò)展性好的開(kāi)發(fā)技術(shù)。

1.簡(jiǎn)單性。Visual C++ 6.0提供了MFC類(lèi)庫(kù)、ATL模板類(lèi)以及AppWizard、ClassWizard等一系列的Wizard工具,用于幫助程序員快速的建立應(yīng)用程序,大大簡(jiǎn)化了應(yīng)用程序的設(shè)計(jì)過(guò)程。使用這些技術(shù),只需編寫(xiě)很少的代碼或不需要編寫(xiě)代碼就可以開(kāi)發(fā)一個(gè)數(shù)據(jù)庫(kù)應(yīng)用程序。

2.靈活性。Visual C++ 6.0提供的開(kāi)發(fā)環(huán)境可以使程序員根據(jù)自己的需要設(shè)計(jì)應(yīng)用程序的界面和功能,Visual C++ 6.0還提供了豐富的類(lèi)庫(kù)和方法,程序員可以根據(jù)應(yīng)用程序的特點(diǎn)進(jìn)行選擇。

3.訪問(wèn)速度快。為了解決ODBC開(kāi)發(fā)的數(shù)據(jù)庫(kù)應(yīng)用程序訪問(wèn)數(shù)據(jù)庫(kù)速度慢的問(wèn)題,Visual C++ 6.0提供了新的訪問(wèn)技術(shù)——OLEDB和ADO,OLEDB和ADO都是基于COM接口的技術(shù),使用這種技術(shù)可以直接對(duì)數(shù)據(jù)庫(kù)的驅(qū)動(dòng)程序進(jìn)行訪問(wèn),這大大提高了對(duì)數(shù)據(jù)庫(kù)的訪問(wèn)速度。

4.可擴(kuò)展性。Visual C++ 6.0提供了OLE技術(shù)和ActiveX技術(shù),這種技術(shù)可以增強(qiáng)應(yīng)用程序的能力。使用OLE技術(shù)和ActiveX技術(shù)可以使程序員利用Visual C++中提供的各種組件、控件以及第三方程序員提供的組件來(lái)創(chuàng)建自己的程序,從而實(shí)現(xiàn)應(yīng)用程序的組件化。使用這種技術(shù)可以使應(yīng)用程序具有良好的可擴(kuò)展性。

5.訪問(wèn)不同種類(lèi)數(shù)據(jù)源。傳統(tǒng)的ODBC技術(shù)只能訪問(wèn)關(guān)系型數(shù)據(jù)庫(kù),在Visual C++中,提供了OLEDB訪問(wèn)技術(shù),不僅可以訪問(wèn)關(guān)系型數(shù)據(jù)庫(kù),還可以訪問(wèn)非關(guān)系型數(shù)據(jù)庫(kù)。

二、Visual C++ 6.0 開(kāi)發(fā)數(shù)據(jù)庫(kù)的相關(guān)技術(shù)

Visual C++ 提供了多種訪問(wèn)數(shù)據(jù)庫(kù)的技術(shù),ODBC(Open DataBase Connectivity)、MFC ODBC(Microsoft Foundation Classes ODBC)、DAO(Data Access Object)、OLEDB(Object Link and Embedding DataBase)、ADO(ActiveX Data Object). 這些技術(shù)各有自己的特點(diǎn)。

ADO技術(shù)是基于OLE DB的訪問(wèn)接口,它繼承了OLE DB技術(shù)的優(yōu)點(diǎn)。ADO對(duì)OLE DB的接口作了封裝,定義了ADO對(duì)象,使程序開(kāi)發(fā)得到了簡(jiǎn)化。ADO技術(shù)屬于數(shù)據(jù)庫(kù)訪問(wèn)的高層接口。

ADO訪問(wèn)數(shù)據(jù)源的特點(diǎn)可概括如下:

第一:易于使用,可以說(shuō)這是ADO最重要的特點(diǎn)之一;第二:可以訪問(wèn)多種數(shù)據(jù)源;第三:訪問(wèn)數(shù)據(jù)源效率高;第四:方便地Web應(yīng)用;第五:技術(shù)編程接口豐富。

三、圖片的存取

1.圖片間接存取。間接存取方法并不直接將圖像存入數(shù)據(jù)庫(kù),而是在數(shù)據(jù)表中用專(zhuān)門(mén)字段存儲(chǔ)圖像文件的路逕和文件名,圖像則以文件形式存放在指定的目錄下,使用時(shí)根據(jù)數(shù)據(jù)庫(kù)字段提供的信息找到所需圖像文件并進(jìn)行加載。

2.圖片直接存取。直接存取方法是將圖像數(shù)據(jù)存儲(chǔ)在數(shù)據(jù)庫(kù)關(guān)系表中,這樣不僅可以保證圖像數(shù)據(jù)的一致性和安全性,還可以提高圖像數(shù)據(jù)的可用性和可伸縮性。

當(dāng)前由于大多數(shù)據(jù)庫(kù)系統(tǒng)并不提供對(duì)圖像數(shù)據(jù)存取的支持,直接存取法的實(shí)現(xiàn),須借助第三方開(kāi)發(fā)工具來(lái)完成將圖像從數(shù)據(jù)庫(kù)中讀取出來(lái)并顯示,或者將圖片保存在數(shù)據(jù)庫(kù)中。下面就以Visual C++ 6.0和access 2003環(huán)境下的數(shù)據(jù)庫(kù)為例,介紹利用ADO實(shí)現(xiàn)對(duì)圖像的直接訪問(wèn)。

3.從數(shù)據(jù)庫(kù)中讀出圖像。從數(shù)據(jù)庫(kù)讀取圖片時(shí),由于圖片數(shù)據(jù)還不是很大,可以直接使用Field對(duì)象的函數(shù)GetChunk()將數(shù)據(jù)庫(kù)中的位圖數(shù)據(jù)讀出來(lái),以二進(jìn)制形式保存在內(nèi)存中,然后將內(nèi)存中的位圖內(nèi)容轉(zhuǎn)換到HBITMAP,這樣就可以直接顯示了。

四、超長(zhǎng)數(shù)據(jù)庫(kù)字段的操作方法

在實(shí)際的開(kāi)發(fā)過(guò)程中常常需要存儲(chǔ)較大的二進(jìn)制數(shù)據(jù)對(duì)象,如圖像、音頻文件、視頻文件或其他二進(jìn)制數(shù)據(jù),這些數(shù)據(jù)稱(chēng)之為二進(jìn)制大對(duì)象BLOB(Binary Large Object),與存取圖片類(lèi)似,超常數(shù)據(jù)庫(kù)字段的訪問(wèn)也有間接存取和直接存取兩種方法。

1.SafeArray。在對(duì)BLOB進(jìn)行操作時(shí),文件可能很大,需要一次傳遞很多的數(shù)據(jù)時(shí),使用SAFEARRAY就會(huì)很方便。SAFEARRAY是一種結(jié)構(gòu)化的數(shù)據(jù)類(lèi)型,包含了一個(gè)由其它數(shù)據(jù)類(lèi)型的數(shù)據(jù)元素組成的數(shù)組。之所以稱(chēng)之為安全的數(shù)組是因?yàn)樗嗣恳痪S的邊界信息,并限制在邊界內(nèi)進(jìn)行數(shù)組元素的訪問(wèn)。

2.將二進(jìn)制文件寫(xiě)入到數(shù)據(jù)庫(kù)。由于這個(gè)二進(jìn)制文件可能很大,所以無(wú)法將所有內(nèi)容一次性讀入到內(nèi)存。我們需要多次讀入,每次可以使用函數(shù)CFile::Read()從文件中讀出一個(gè)數(shù)據(jù)包(大小為ChunkSize),然后調(diào)用Field對(duì)象的AppendChrnk()函數(shù)將該包讀入數(shù)據(jù)庫(kù)。所有過(guò)程在一個(gè)while循環(huán)中實(shí)現(xiàn),直到讀完所有的數(shù)據(jù)。

3.從數(shù)據(jù)庫(kù)讀出二進(jìn)制對(duì)象到文件。同樣,由于這個(gè)二進(jìn)制對(duì)象可能很大,無(wú)法將所有內(nèi)容一次性讀入內(nèi)存中需要多次。每次使用Field對(duì)象的GetChunk()函數(shù)讀出一個(gè)數(shù)據(jù)包(大小為ChunkSize),然后使用函數(shù)Cfile::Write()將該包寫(xiě)入文件中,所有過(guò)程在一個(gè)while循環(huán)中實(shí)現(xiàn),直到讀完所有的數(shù)據(jù)。endprint