專利名稱:一種動(dòng)態(tài)的基于對(duì)象格式的用于數(shù)據(jù)操縱的系統(tǒng)和方法
技術(shù)領(lǐng)域:
本發(fā)明涉及信息操縱。尤其是,涉及一種動(dòng)態(tài)方法學(xué)和對(duì)基于對(duì)象的信息操縱的抽象。
目前,把數(shù)據(jù)抽象成一個(gè)對(duì)象需要進(jìn)行信息的靜態(tài)轉(zhuǎn)換,并且每種信息需要各自的用于操縱數(shù)據(jù)的接口集合,其中所抽象成的對(duì)象用于基于對(duì)象的操縱。例如,目前C++編譯器并不支持對(duì)以關(guān)系形式進(jìn)行存儲(chǔ)的數(shù)據(jù)的處理,其中關(guān)系形式的數(shù)據(jù)具有動(dòng)態(tài)的列數(shù)或來自C++客戶機(jī)的動(dòng)態(tài)數(shù)據(jù)類型。而且,編譯器要求在設(shè)計(jì)時(shí)必須建立一個(gè)與所訪問的關(guān)系型數(shù)據(jù)例如SQL數(shù)據(jù)完全匹配的描述。這需要為每個(gè)被訪問的關(guān)系型表建立一個(gè)每個(gè)列和數(shù)據(jù)類型的描述。然后一個(gè)面向?qū)ο蟪绦?例如在一個(gè)C++計(jì)算機(jī)上)使用這一描述,以從關(guān)系數(shù)據(jù)存儲(chǔ)中讀取數(shù)據(jù)并把數(shù)據(jù)寫到關(guān)系數(shù)據(jù)存儲(chǔ)中。
在上述方法中存在兩個(gè)主要的問題。首先,必須事先為每個(gè)被訪問的關(guān)系數(shù)據(jù)存儲(chǔ)建立一個(gè)確定的描述。其次,如果數(shù)據(jù)存儲(chǔ)改變了(添加或刪除了一列,或列的數(shù)據(jù)類型改變了),則必須修改這個(gè)確定的描述并且訪問該關(guān)系存儲(chǔ)的程序必須重新進(jìn)行編譯并把編譯好的程序重新分配給使用這一程序的所有客戶機(jī)。
本發(fā)明的一個(gè)目的在于提供一種改進(jìn)的客戶/服務(wù)器系統(tǒng)和方法,該系統(tǒng)和方法提供客戶機(jī)端對(duì)存儲(chǔ)在相同或不同機(jī)器上的數(shù)據(jù)的訪問。
本發(fā)明的另一個(gè)目的在于提供一種改進(jìn)的系統(tǒng)和方法,該系統(tǒng)和方法通過面向?qū)ο蟪绦蛱峁?duì)數(shù)據(jù)的動(dòng)態(tài)訪問,這種動(dòng)態(tài)訪問以一種統(tǒng)一的可擴(kuò)展的方式進(jìn)行。
本發(fā)明的另一個(gè)目的在于提供一種系統(tǒng)和方法,該系統(tǒng)和方法用于把信息表示并轉(zhuǎn)換成一種模型,該模型可提供數(shù)據(jù)的直接基于對(duì)象的操縱。
本發(fā)明的另一個(gè)目的在于提供一種系統(tǒng)和方法,該系統(tǒng)和方法可把任何數(shù)據(jù)動(dòng)態(tài)抽象成一個(gè)轉(zhuǎn)換后的對(duì)象。
本發(fā)明的另一個(gè)目的在于提供一種用于操縱信息的統(tǒng)一的基于對(duì)象的系統(tǒng)和方法。
本發(fā)明的另一個(gè)目的在于提供一種改進(jìn)的系統(tǒng)和方法,該系統(tǒng)和方法用于通過使用一種面向?qū)ο笳Z言為非面向?qū)ο髷?shù)據(jù)提供一種面向?qū)ο蟊硎尽?br>
本發(fā)明的另一個(gè)目的在于提供一種系統(tǒng)和方法,該系統(tǒng)和方法用于通過一個(gè)基于對(duì)象的程序動(dòng)態(tài)地訪問一個(gè)關(guān)系型數(shù)據(jù)存儲(chǔ),即不需要在設(shè)計(jì)時(shí)所建立的數(shù)據(jù)描述,其中數(shù)據(jù)描述在數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)改變時(shí)需要重新建立并且需要對(duì)程序重新進(jìn)行編譯。
本發(fā)明的另一個(gè)目的在于通過一個(gè)基于對(duì)象的程序提供一種對(duì)關(guān)系型數(shù)據(jù)的通用的行/列訪問機(jī)制。
根據(jù)本發(fā)明,一種可擴(kuò)展框架以一種動(dòng)態(tài)的基于對(duì)象的格式建立了一個(gè)用于數(shù)據(jù)操縱的統(tǒng)一的接口。數(shù)據(jù)庫管理器類提供對(duì)存儲(chǔ)在數(shù)據(jù)庫中的數(shù)據(jù)的訪問。特定文件類包括數(shù)據(jù)庫管理器類并且為訪問者提供了一個(gè)的統(tǒng)一的接口,例如應(yīng)用94。列數(shù)據(jù)類用于管理對(duì)以對(duì)象方式進(jìn)行存儲(chǔ)的信息所做的修改。記錄矩陣類用于管理對(duì)列數(shù)據(jù)類中的對(duì)象所進(jìn)行的向量化訪問。
通過結(jié)合附圖,可從下面的對(duì)于本發(fā)明的上述最佳實(shí)施例的詳細(xì)描述中更清晰地了解到本發(fā)明的其它一些特點(diǎn)和優(yōu)點(diǎn)。
附圖簡(jiǎn)介
圖1表示根據(jù)本發(fā)明的最佳實(shí)施例的數(shù)據(jù)訪問層。
圖2表示圖1中的CDatabaseManager的記錄數(shù)據(jù)集。
圖3表示本發(fā)明的最佳實(shí)施例的數(shù)據(jù)訪問層類。
執(zhí)行本發(fā)明的最佳模式本發(fā)明的最佳實(shí)施例提供了一種非面向?qū)ο髷?shù)據(jù)的面向?qū)ο蟊硎?,并且提供了通過面向?qū)ο蠓椒ㄔ跀?shù)據(jù)的二維表示(行,列)中的訪問。在最佳實(shí)施例中,被操縱的數(shù)據(jù)存儲(chǔ)在表示中,其中數(shù)據(jù)從表示中被讀出(即,其文件格式或數(shù)據(jù)庫表模式)。
本發(fā)明的最佳實(shí)施例還提供了一種系統(tǒng)和方法,該系統(tǒng)和方法借助于面向?qū)ο缶幊桃砸环N動(dòng)態(tài)的基于對(duì)象的格式實(shí)現(xiàn)了一個(gè)用于數(shù)據(jù)操縱的唯一的統(tǒng)一的接口。該最佳實(shí)施例還為開發(fā)人員提供了一個(gè)可擴(kuò)展框架,以提供不需要訪問者考慮基礎(chǔ)數(shù)據(jù)變化的數(shù)據(jù)組件插件。
根據(jù)本發(fā)明的最佳實(shí)施例,提供了一種用于操縱并動(dòng)態(tài)轉(zhuǎn)換數(shù)據(jù)的抽象系統(tǒng)和方法。而且,根據(jù)本發(fā)明的最佳實(shí)施例,提供了一種框架系統(tǒng)和方法,用于根據(jù)不同的訪問方法獲得并處理和寫入任何類型的數(shù)據(jù)。
參看圖1,數(shù)據(jù)訪問層的結(jié)構(gòu)是根據(jù)本發(fā)明的最佳實(shí)施例提出的。應(yīng)用94為要求訪問數(shù)據(jù)的面向?qū)ο蟪绦?,其中所要求訪問的數(shù)據(jù)可能在關(guān)系數(shù)據(jù)庫80的任一個(gè)數(shù)據(jù)文件中,或在結(jié)構(gòu)文件82(基于記錄的)中,或在非結(jié)構(gòu)文件84中。
根據(jù)本發(fā)明,數(shù)據(jù)訪問層70包括幾個(gè)組成部分,這些組成部分包括CSpecializedFile 100(包括接口方法90),CDataBaseManager102,ODBC 96,文件API 98,AS/400命令語言88,AS/400程序調(diào)用86,AS/400系統(tǒng)對(duì)象訪問72和數(shù)據(jù)的基于對(duì)象的表示92。如線91所示,表示92是從CSpecializedFile 100派生出來的,并且如線93所示,表示92由應(yīng)用程序94進(jìn)行初始化,以通過使用接口方法90來訪問關(guān)系數(shù)據(jù)庫80,結(jié)構(gòu)化文件82和非結(jié)構(gòu)化文件84,如線95所示。系統(tǒng)對(duì)象訪問(SOA)72提供對(duì)于AS/400命令語言88和AS/400程序調(diào)用86的基于對(duì)象的訪問。
數(shù)據(jù)文件80,82和84可能位于與數(shù)據(jù)訪問層70不同的機(jī)器上。
開放數(shù)據(jù)庫互連(ODBC)96是一個(gè)用于訪問線81所示的不同廠家的數(shù)據(jù)庫80的一種工業(yè)標(biāo)準(zhǔn)方法。數(shù)據(jù)訪問層提供了如線83所示的應(yīng)用程序接口(API)98,用于讀取或?qū)懭虢Y(jié)構(gòu)化文件或非結(jié)構(gòu)化文件,并且每個(gè)平臺(tái)為API提供了特定的版本。數(shù)據(jù)訪問層提供了如線85所示的AS/400命令語言88,用于寫入任一個(gè)數(shù)據(jù)文件80,82,84。數(shù)據(jù)訪問層使用了如線87所示的AS/400程序調(diào)用86,用于讀取或?qū)懭氲饺我粋€(gè)數(shù)據(jù)文件80,82,84。
根據(jù)本發(fā)明的最佳實(shí)施例,多維模型表示一種為任何類型的信息所提供并保持的抽象。這種抽象包括一種多維數(shù)據(jù)抽象,用于提供基于向量的訪問,包括讀取,修改,寫入和刪除。
用于快速訪問的多維數(shù)據(jù)的超高速緩存方法,其中訪問者并不知道數(shù)據(jù)是否被超高速緩存。
根據(jù)要求提交(即保存)數(shù)據(jù)。
根據(jù)要求更新數(shù)據(jù)。
根據(jù)訪問者所要求的格式進(jìn)行自動(dòng)數(shù)據(jù)轉(zhuǎn)換。
用于管理多個(gè)訪問者的引用計(jì)數(shù)。
登記和通知機(jī)制,用于把對(duì)數(shù)據(jù)模型所做的改變通知給訪問者。
本發(fā)明的最佳實(shí)施例的系統(tǒng)和方法提供了,首先訪問者可以使用并操縱信息,其次可以把組件執(zhí)行器插入到提供信息訪問的框架中。
訪問者通過初始化一個(gè)數(shù)據(jù)的抽象模型對(duì)象并對(duì)該對(duì)象進(jìn)行注冊(cè)來使用本發(fā)明的最佳實(shí)施例。這種方法可增加數(shù)據(jù)對(duì)象的使用者數(shù)并允許在對(duì)象改變時(shí)數(shù)據(jù)對(duì)象把這一情況通知給訪問者。通過使用設(shè)置和獲取方法并傳遞一個(gè)唯一標(biāo)識(shí)一個(gè)元素請(qǐng)求的向量,可以在數(shù)據(jù)對(duì)象中讀取并修改數(shù)據(jù)。所做的修改被高速緩存起來而未被寫入到永久存儲(chǔ)器中,直到訪問者要求通過把所做的改變寫入到永久存儲(chǔ)器中來提交所做的修改。
參看圖3,組件執(zhí)行器使用了四種抽象來實(shí)現(xiàn)一個(gè)框架。這四種抽象為CDatabaseManager 102CSpecializedFile 100CRecordData 110(aka CRecordArray)CColumnData 112CDatabaseManager 102是一種抽象,用于提供對(duì)存儲(chǔ)在數(shù)據(jù)庫中的數(shù)據(jù)的訪問。CSpecializedFile 100是一個(gè)抽象類,該類為了使用CDatabaseManager中的數(shù)據(jù)訪問方法而使用了CDatabaseManager 102,并且CSpecializedFile 100為訪問者操縱信息提供了一個(gè)統(tǒng)一的接口。CRecordData 110管理對(duì)存儲(chǔ)為CColumnData 112對(duì)象的信息所進(jìn)行的向量化訪問。CColumnData對(duì)象管理對(duì)信息所做的改變并在訪問者要求的時(shí)候把信息存儲(chǔ)起來。
1.數(shù)據(jù)訪問層能力根據(jù)本發(fā)明的最佳實(shí)施例,用于傳輸控制協(xié)議/網(wǎng)絡(luò)協(xié)議(TCP/IP)圖形用戶接口(GUI)組件的數(shù)據(jù)訪問層使用ODBC來讀取并寫入文件。在文件是只讀的情況下,使用CL命令和系統(tǒng)API(通過SOA)來寫入文件。
數(shù)據(jù)訪問層提供讀取/寫入/刪除一條記錄讀取/修改列重寫整個(gè)文件列層次數(shù)據(jù)轉(zhuǎn)換根據(jù)要求提交更新超高速緩存方法(記錄層次)2.類瀏覽為數(shù)據(jù)訪問層提供功能的類為數(shù)據(jù)管理器(ODBC管理器)記錄數(shù)據(jù)抽象列數(shù)據(jù)抽象特殊文件對(duì)象參看圖3,圖中數(shù)據(jù)訪問層類被圖表化了,圖3表示一些數(shù)據(jù)訪問層類中所包括的方法(并不是全部)。CSpecializedFile類100包括CDatabaseManager 102,其中CDatabaseManager102對(duì)讀取和寫入數(shù)據(jù)文件80,82,84的管理進(jìn)行抽象。如果CSpecializedFile 100的基類功能不足,則將生成派生的特殊文件類。這些派生的特殊文件類為CMixedFile 104,CDatabaseFile 106,CIFSFile 108。對(duì)特殊文件類進(jìn)行派生是為了重載基類的提交方法,從而可以使用一種不同的方式來處理文件的修改,并或根據(jù)列數(shù)據(jù)項(xiàng)和數(shù)據(jù)類型執(zhí)行特定的獲取/設(shè)置方法。例如,可寫一個(gè)通過CL命令修改文件但是通過所包括的CdatabaseManager對(duì)象102讀取文件的提交方法。而且,可寫一個(gè)特定的獲取/設(shè)置方法,為一個(gè)特定的列返回該列相應(yīng)的數(shù)據(jù)類型的數(shù)據(jù)。
下面描述每個(gè)類的類定義。這些類為CDatabaseManager 102CDecordData 110CColumnData 112CSpecializedFile 1003.數(shù)據(jù)庫管理器(CDatabaseManager)數(shù)據(jù)庫管理器類102包括ODBC實(shí)現(xiàn),該實(shí)現(xiàn)用于連接,訪問并管理數(shù)據(jù)庫文件中的數(shù)據(jù)。另外數(shù)據(jù)庫管理器類102還處理這種情況,即對(duì)于所請(qǐng)求的連接系統(tǒng),如果數(shù)據(jù)源不存在則自動(dòng)創(chuàng)建一個(gè)ODBC數(shù)據(jù)源。
參看圖2,圖中表示了數(shù)據(jù)庫管理器102,CRecord數(shù)據(jù)對(duì)象110,和CColumnData對(duì)象112的內(nèi)部數(shù)據(jù)設(shè)計(jì)。CDatabaseManager 102對(duì)CRecordData對(duì)象110的集合120,122進(jìn)行管理,其中CDatabaseManager 102中包括CRecordData指針116,118的一個(gè)超高速緩存114,其中CRecordData對(duì)象110的集合120,122依次對(duì)CColumnData對(duì)象112的集合進(jìn)行管理。
CDatabaseManager類102的方法為CDatabaseManager()構(gòu)造器,用于通過一個(gè)ODBC數(shù)據(jù)源連接到AS/400上。如果ODBC數(shù)據(jù)源不存在則將創(chuàng)建一個(gè)數(shù)據(jù)源,然后建立連接。
一個(gè)新建方法(未示出),用于創(chuàng)建一個(gè)新的(空的)數(shù)據(jù)庫文件和該數(shù)據(jù)庫文件的一個(gè)成員。
Open()方法分配一個(gè)SQL語句,并執(zhí)行這一SQL選擇語句以檢索信息,分配一個(gè)記錄數(shù)據(jù)對(duì)象,并把第一個(gè)記錄的列和數(shù)據(jù)同該記錄和列數(shù)據(jù)連接在一起。
Close()方法134關(guān)閉文件并結(jié)束ODBC數(shù)據(jù)源連接。
Commit()方法136從記錄數(shù)據(jù)對(duì)象120,122集合中讀取,并根據(jù)記錄數(shù)據(jù)對(duì)象中的未決操作137,138或根據(jù)列數(shù)據(jù)112的是否已修改標(biāo)記140做適當(dāng)?shù)男薷?。Commit()方法136建立適當(dāng)?shù)腟QL命令并執(zhí)行這些命令。如果出現(xiàn)了錯(cuò)誤,則執(zhí)行回退。在已成功執(zhí)行了修改后,記錄數(shù)據(jù)對(duì)象116,118的超高速緩存114被更新。
GetNumberOfColumns()142返回?cái)?shù)據(jù)庫文件(未示出)中的總列數(shù)。
GetColumnName()(未示出)返回一個(gè)特定列的名稱,該名稱作為一個(gè)CString對(duì)象。
GetTotalNumberOfRecords()(未示出)返回?cái)?shù)據(jù)庫文件中的總記錄數(shù)。
和GetColumnData()方法144檢索一個(gè)特定記錄列中的數(shù)據(jù)對(duì)象。這一檢索是通過檢查鍵控記錄超高速緩存114來實(shí)現(xiàn)的,如果記錄已經(jīng)被檢索,則返回該記錄的列數(shù)據(jù)對(duì)象。如果記錄還沒有被檢索,則需檢索該記錄。這導(dǎo)致了該記錄數(shù)據(jù)對(duì)象的分配,并導(dǎo)致把第一記錄的列和數(shù)據(jù)同該記錄的記錄和列數(shù)據(jù)連接在一起。
IsRecordModified()方法146檢查一個(gè)列數(shù)據(jù)對(duì)象的所有的已修改標(biāo)記,如果一個(gè)或多個(gè)標(biāo)記被改變則返回TRUE,如果沒有標(biāo)記被改變則返回FALSE。
SetColumnData()方法148修改(在超高速緩存114中)其列數(shù)據(jù)對(duì)象112中的特定列的數(shù)據(jù)成員。
DeleteFile()方法(未示出)刪除一個(gè)特定的文件或文件中的成員。
AddRecord()方法150返回一個(gè)剛添加到記錄數(shù)據(jù)超高速緩存114中的新記錄數(shù)據(jù)對(duì)象的記錄號(hào)。創(chuàng)建一個(gè)空的記錄數(shù)據(jù)對(duì)象110(和其相關(guān)的列數(shù)據(jù)對(duì)象112)。然后需要調(diào)用SetColumnData()方法148把數(shù)據(jù)放入這個(gè)新建記錄中。
ReadRecord()方法152提供了一種在某個(gè)時(shí)刻讀取記錄的無格式方法。該方法返回CString類型的記錄的內(nèi)容。如果該記錄包括多個(gè)列,則由制表符(\t)把每一列分隔開。
DeleteRecord()方法154通過把記錄數(shù)據(jù)超高速緩存114中的一條記錄標(biāo)記為已刪除狀態(tài)來刪除該記錄。為使刪除有效,隨后必須調(diào)用Commit()136。
DeleteAllRecords()方法158通過把所有的超高速緩存記錄114標(biāo)記為已刪除狀態(tài)并保留一個(gè)表示所有記錄均已被刪除的狀態(tài)變量(未示出)來刪除文件中的所有記錄。
CDatabaseManager類的保護(hù)數(shù)據(jù)成員為由記錄抽象對(duì)象和修改解釋(記錄超高速緩存)的記錄號(hào)和列名鍵控的集合CString類型的庫CString類型的文件CString類型的成員名整型的記錄總數(shù)CString類型的系統(tǒng)名數(shù)據(jù)源句柄intCString的列總數(shù)布爾型的DeleteAll4.記錄數(shù)據(jù)(CRecordData)記錄數(shù)據(jù)類110包括在CDatabaseManager類102所管理的記錄超高速緩存114中。記錄數(shù)據(jù)類110包括并管理已檢索,刪除或創(chuàng)建(新建的)的記錄。
CRecordData類的方法為CRecordData()構(gòu)造器160創(chuàng)建一個(gè)記錄數(shù)據(jù)對(duì)象120,122,然后使用CDatabaseManager對(duì)象102檢索文件中的列數(shù)。構(gòu)造器使用這個(gè)列數(shù)值創(chuàng)建一個(gè)由列名162鍵控的列數(shù)據(jù)對(duì)象112的集合。
GetColumnData()方法164檢索一個(gè)特定列的列數(shù)據(jù)對(duì)象166。
GetRecordNumber()方法(未示出)返回記錄數(shù)據(jù)對(duì)象所表示的記錄號(hào)。
IsRecordModified()方法(未示出)搜索記錄對(duì)象122所管理的列數(shù)據(jù)對(duì)象166的列表,如果一個(gè)或多個(gè)列中的修改標(biāo)記140被設(shè)置了,則返回TRUE。否則返回FALSE。
GetPendingOperation()方法170返回對(duì)于記錄110(新建的或已刪除的)的操作未決137,138。
SetPendingOperation()方法168設(shè)置未決操作成員數(shù)據(jù)172的值為傳送過來的參數(shù)值。未決操作168用于標(biāo)記記錄為新建的還是已刪除的。每個(gè)列數(shù)據(jù)對(duì)象166的修改標(biāo)記用于管理該列是否已經(jīng)被修改。
CRecordData類110的保護(hù)數(shù)據(jù)成員為由列名和列號(hào)鍵控的列數(shù)據(jù)對(duì)象的集合整型的記錄號(hào)未決操作(新創(chuàng)建的,已刪除的)對(duì)CDatabaseManager對(duì)象的引用5.列數(shù)據(jù)描述(CColumnData)列數(shù)據(jù)類112包括在CDatabaseManager類102所管理的記錄數(shù)據(jù)對(duì)象110中。列數(shù)據(jù)類112包括并管理已經(jīng)被檢索,刪除或創(chuàng)建的記錄120的列信息和數(shù)據(jù)。
CColumnData類112的方法為CColumnData()構(gòu)造器180建立一個(gè)表示列的數(shù)據(jù)172和信息的列數(shù)據(jù)對(duì)象166,其中信息包括列名162,列類型182,列號(hào)184和修改標(biāo)記140。
GetColumnName方法186返回列名。
GetColumnNumber方法188返回列號(hào)。
GetColumnDataType()方法190返回列的數(shù)據(jù)類型。
IsModified方法192用于判定數(shù)據(jù)是否已被修改。
GetColumnData()方法194返回列的數(shù)據(jù)172。為每種返回?cái)?shù)據(jù)類型提供了相應(yīng)的重載方法。
SetColumnData()方法196設(shè)置列的數(shù)據(jù)172。為每種返回?cái)?shù)據(jù)類型提供了相應(yīng)的重載方法。
CeolumnData 112的保護(hù)數(shù)據(jù)成員為CString類型的列名SQL類型列數(shù)據(jù)類型CString列數(shù)據(jù)類型布爾類型的修改標(biāo)記整型的列號(hào)6.特定文件對(duì)象(CSpecializedFile)特定文件對(duì)象類100是派生文件對(duì)象104,106和108的父類。該類為構(gòu)造器CSpecializedFile()200Open()202,Close()204,Commit()156,ReadRecord()206,AddRecord()208,DeleteAllRecords()210,DeleteRecord()212,Delete()214,GetNumberOfColumns()216,GetColumnName()218提供了基類功能。
CSpecializedFile類的方法為CSpecializedFile()構(gòu)造器200建立一個(gè)表示將要操縱的文件的文件對(duì)象106,并創(chuàng)建CDatabseManager對(duì)象102。如果要使用CL命令,則將創(chuàng)建CL命令棧對(duì)象(未示出)。另外,如果需要用于系統(tǒng)API的SOA對(duì)象包裝(未示出),則將創(chuàng)建所需要的SOA對(duì)象包裝。
一種新建方法(未示出),用于創(chuàng)建一個(gè)新建的(空的)數(shù)據(jù)庫文件106和文件中的成員。
Open()方法202調(diào)用CDatabaseManager對(duì)象102的Open()方法132打開要求打開的文件。
Close()方法204調(diào)用CDatabaseManager對(duì)象102的Close()方法134關(guān)閉要求關(guān)閉的文件。如果要保存所做的修改,則必須調(diào)用Commit()方法156。否則所做的修改將丟失。
GetTotalNumberOfColumns()(aka GetNumberOfColumns())方法216返回所要求的文件中的總列數(shù)。
GetColumnName()方法218返回列名,該列名為一個(gè)字符串。
如果可以使用ODBC(文件具有讀/寫能力)寫出所要求的文件,則Commit()方法156調(diào)用CDatabaseManager對(duì)象102的Commit()方法136。否則,如有必要?jiǎng)tCommit()方法156建立適當(dāng)?shù)腃L命令串(或CL命令集合)和SOA對(duì)象更新。然后執(zhí)行CL命令和SOA對(duì)象提交。CL命令的執(zhí)行是使用CL命令棧對(duì)象來實(shí)現(xiàn)的。
ReadRecord()方法206調(diào)用CDatabaseManager對(duì)象102的ReadRecord()方法152讀取所要求文件中的一條特定記錄,并返回格式化的CString形式的該記錄。
SetColumnData()方法(未示出)調(diào)用CDatabaseManager對(duì)象102的SetColumnData()方法148來設(shè)置特定列的數(shù)據(jù)。
AddRecord()方法208調(diào)用CDatabaseManager對(duì)象102的AddRecord()方法150來添加一條以后可以使用特定集合進(jìn)行設(shè)置的空記錄。AddRecord()208返回所添加記錄的記錄號(hào)。
DeleteRecord()方法212調(diào)用CDatabaseManager對(duì)象102的DeleteReeord()方法154,把特定的記錄標(biāo)記為已刪除狀態(tài)。當(dāng)調(diào)用Commit()方法156時(shí),該記錄將被刪除。
DeleteAllRecords()方法210調(diào)用CDatabaseManager對(duì)象102的DeleteAllRecords()方法158,把文件中的所有記錄標(biāo)記為已刪除狀態(tài)。當(dāng)調(diào)用Commit()方法156時(shí),所有的記錄都將被刪除。
其他的方法可由派生的特定文件對(duì)象104,106,108來實(shí)現(xiàn)。尤其是,重寫獲取和設(shè)定方法以返回一個(gè)特定數(shù)據(jù)類型的列數(shù)據(jù)并設(shè)置特定數(shù)據(jù)類型的列信息。
CSpecializedFile的保護(hù)數(shù)據(jù)成員為CDatabaseManager對(duì)象指針CL命令棧對(duì)象指針SOA對(duì)象指針CString類型的庫CString類型的文件CString類型的成員名CString類型的路徑CString類型的系統(tǒng)名在實(shí)際操作中,使用了前面所描述的結(jié)構(gòu)和方法的例子具有幾個(gè)應(yīng)用程序94,這幾個(gè)應(yīng)用程序94用于管理機(jī)器的TCP/IP配置。這一操作要求應(yīng)用程序94訪問關(guān)系數(shù)據(jù)庫80和結(jié)構(gòu)化文件82。第一應(yīng)用程序94初始化數(shù)據(jù)CDataBase文件106的基于對(duì)象的表示,以讀取并寫入TCP/IP尋址信息。第二應(yīng)用程序94通過初始化CFSFile108來建立機(jī)器域名系統(tǒng)(DNS)信息,以從結(jié)構(gòu)化文件82中讀取DNS條目并把DNS條目寫入到結(jié)構(gòu)化文件82中。第三應(yīng)用程序94通過初始化CMixedFile 104來管理機(jī)器的TCP/IP路由信息(RIP)文件。所有這些信息都是通過用戶接口74呈現(xiàn)給用戶的,然后在用戶完成上述配置后被存儲(chǔ)起來。另外,數(shù)據(jù)92的基于對(duì)象的表示可以直接由一個(gè)應(yīng)用程序編程人員創(chuàng)建并由應(yīng)用94使用(不需要用戶接口74)。
本發(fā)明的一個(gè)優(yōu)點(diǎn)在于它提供了一種改進(jìn)的客戶機(jī)/服務(wù)器系統(tǒng)和方法,該系統(tǒng)和方法提供從客戶機(jī)端對(duì)位于相同或不同機(jī)器上的數(shù)據(jù)的訪問。
本發(fā)明的另一個(gè)優(yōu)點(diǎn)在于它提供了一種改進(jìn)的客戶機(jī)/服務(wù)器系統(tǒng)和方法,該系統(tǒng)和方法通過面向?qū)ο蟪绦蛱峁┝藢?duì)數(shù)據(jù)的動(dòng)態(tài)訪問,這一動(dòng)態(tài)訪問是以一種統(tǒng)一的可擴(kuò)展的方式進(jìn)行的。
本發(fā)明的另一個(gè)優(yōu)點(diǎn)在于它提供了一種用于把信息表示并轉(zhuǎn)換到一個(gè)模型中的系統(tǒng)和方法,該模型提供了對(duì)于數(shù)據(jù)的直接的基于對(duì)象的操縱。
本發(fā)明的另一個(gè)優(yōu)點(diǎn)在于它提供了一種用于把任何數(shù)據(jù)動(dòng)態(tài)抽象到一個(gè)轉(zhuǎn)換后的對(duì)象中的系統(tǒng)和方法。
本發(fā)明的另一個(gè)優(yōu)點(diǎn)在于它提供了一種用于操縱信息的統(tǒng)一的基于對(duì)象的系統(tǒng)和方法。
本發(fā)明的另一個(gè)優(yōu)點(diǎn)在于它提供了一種通過基于對(duì)象的程序動(dòng)態(tài)地訪問關(guān)系數(shù)據(jù)存儲(chǔ)的系統(tǒng)和方法,即不需要數(shù)據(jù)描述,其中數(shù)據(jù)描述在設(shè)計(jì)時(shí)建立,并且如果數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)發(fā)生了改變則需重新建立數(shù)據(jù)描述并需要對(duì)程序重新進(jìn)行編譯。
本發(fā)明的另一個(gè)優(yōu)點(diǎn)在于它通過基于對(duì)象的程序提供了一種對(duì)關(guān)系數(shù)據(jù)的通用的行/列訪問機(jī)制。
其它實(shí)施例很高興地指出,雖然為了說明的需要這里描述了本發(fā)明的一個(gè)特定實(shí)施例,但是可在不背離本發(fā)明的精神和范圍的情況下對(duì)該實(shí)施例做不同的改進(jìn)。尤其是,下面所做的改變是在本發(fā)明的范圍之內(nèi)的,即提供程序存儲(chǔ)器或存儲(chǔ)器設(shè)備例如固態(tài)或液態(tài)傳輸介質(zhì),磁性或光學(xué)導(dǎo)線,磁帶或磁盤等,用于存儲(chǔ)機(jī)器可讀的信號(hào),以根據(jù)本發(fā)明的方法控制計(jì)算機(jī)的操作,并/或根據(jù)本發(fā)明的系統(tǒng)來構(gòu)造其組件。
而且,可能在任一種計(jì)算機(jī)系統(tǒng)例如IBM系統(tǒng)390,AS/400,PC或其他的計(jì)算機(jī)系統(tǒng)中并且按照一個(gè)或多個(gè),或一個(gè)或多個(gè)的一部分,程序模型或由任一種編程語言例如C++,JAVA等所生成的對(duì)象,執(zhí)行方法的每一個(gè)步驟。而且,可以由特定目的的硬件或?qū)iT為這一目的所設(shè)計(jì)的電路模型來執(zhí)行每個(gè)所述步驟或一個(gè)文件,或?qū)ο?,或其它的用于?shí)現(xiàn)所述每一個(gè)步驟的操作。
因此,只能由下述權(quán)利要求書或其它等同形式來限制所述本發(fā)明的保護(hù)范圍。
權(quán)利要求
1.一種用于操縱數(shù)據(jù)的方法包括以下步驟在一個(gè)可擴(kuò)展框架中以一種動(dòng)態(tài)的基于對(duì)象的形式為數(shù)據(jù)操縱建立一個(gè)統(tǒng)一的接口,所述框架包括一個(gè)接口和一個(gè)特定文件類,其中特定文件類定義了一個(gè)用于管理所述數(shù)據(jù)的基于對(duì)象的方法;操作所述特定文件類,以包括所述數(shù)據(jù)庫管理器類并為訪問者訪問關(guān)系數(shù)據(jù)提供一個(gè)統(tǒng)一的接口;和操作所述特定文件類,以管理對(duì)以對(duì)象形式進(jìn)行存儲(chǔ)的信息的向量化訪問。
2.如權(quán)利要求1所述的方法,該方法還包括以下步驟操作所述特定文件類,以實(shí)現(xiàn)派生的特定文件類,其中派生類用于重載提交方法并根據(jù)列數(shù)據(jù)項(xiàng)和數(shù)據(jù)類型執(zhí)行特定的獲取和設(shè)定方法。
3.一種可擴(kuò)展框架系統(tǒng)以一種動(dòng)態(tài)的基于對(duì)象的形式為數(shù)據(jù)操縱建立了一個(gè)統(tǒng)一的接口,所述框架包括一個(gè)數(shù)據(jù)庫管理器類,用于提供對(duì)存儲(chǔ)在數(shù)據(jù)庫中的數(shù)據(jù)的訪問;一個(gè)特定文件類,用于包括所述數(shù)據(jù)庫管理器類并為訪問者的使用提供一個(gè)統(tǒng)一的接口;一個(gè)列數(shù)據(jù)類,用于管理對(duì)以對(duì)象形式進(jìn)行存儲(chǔ)的信息所做的改變;和一個(gè)記錄矩陣類,用于管理對(duì)所述列數(shù)據(jù)類中的所述對(duì)象的向量化訪問。
4.如權(quán)利要求3所述的可擴(kuò)展框架系統(tǒng)還包括至少一個(gè)派生的特定文件類,用于提供對(duì)非關(guān)系型數(shù)據(jù)的統(tǒng)一的訪問,并選擇性地重載提交方法并根據(jù)列數(shù)據(jù)項(xiàng)和數(shù)據(jù)類型執(zhí)行特定的獲取和設(shè)定方法。
5.如權(quán)利要求3所述的可擴(kuò)展框架系統(tǒng),所述數(shù)據(jù)庫管理器類還包括一個(gè)數(shù)據(jù)庫管理器構(gòu)造器,用于同一個(gè)數(shù)據(jù)源建立一個(gè)連接;一個(gè)新建方法,用于創(chuàng)建一個(gè)數(shù)據(jù)庫文件和該數(shù)據(jù)庫文件中的一個(gè)成員;一個(gè)打開方法,用于分配并連接一個(gè)記錄數(shù)據(jù)對(duì)象;一個(gè)關(guān)閉方法,用于關(guān)閉所述數(shù)據(jù)庫文件并結(jié)束對(duì)所述數(shù)據(jù)源的所述連接;一個(gè)提交方法,用于選擇性地修改或回退對(duì)所述記錄數(shù)據(jù)對(duì)象所做的修改;一個(gè)獲得總列數(shù)的方法,用于返回所述數(shù)據(jù)庫文件中的總列數(shù);一個(gè)獲得列名的方法,用于返回一個(gè)特定列的名稱;一個(gè)獲得總記錄數(shù)的方法,用于返回所述數(shù)據(jù)庫文件中的總記錄數(shù);一個(gè)獲得列數(shù)據(jù)的方法,用于檢索一個(gè)特定記錄列的數(shù)據(jù)對(duì)象;一個(gè)記錄是否已被修改的方法,用于檢查已被改變的列數(shù)據(jù)對(duì)象的修改標(biāo)記;一個(gè)設(shè)置列數(shù)據(jù)的方法,用于更新所述列數(shù)據(jù)對(duì)象中的一個(gè)數(shù)據(jù)成員;一個(gè)可選擇的刪除文件的方法,用于刪除所述數(shù)據(jù)庫文件或所述數(shù)據(jù)庫文件中的一個(gè)成員;一個(gè)添加記錄的方法,用于創(chuàng)建一個(gè)空記錄數(shù)據(jù)對(duì)象和與其相關(guān)的列數(shù)據(jù)對(duì)象;一個(gè)讀取記錄的方法,用于讀取一個(gè)記錄;一個(gè)刪除記錄的方法,用于標(biāo)記該條記錄為已刪除狀態(tài);和一個(gè)刪除所有記錄的方法,用于標(biāo)記所述數(shù)據(jù)庫文件中的所有記錄為已刪除狀態(tài);
6.如權(quán)利要求5所述的可擴(kuò)展框架系統(tǒng),所述數(shù)據(jù)庫管理器具有作為保護(hù)數(shù)據(jù)成員的一個(gè)記錄超高速緩存,一個(gè)串類型的庫,一個(gè)串類型的文件,一個(gè)串類型的成員名,串類型的系統(tǒng)名,記錄總數(shù),列總數(shù),數(shù)據(jù)源句柄和全刪除標(biāo)記。
7.如權(quán)利要求3所述的可擴(kuò)展框架系統(tǒng),所述記錄數(shù)據(jù)類還包括一個(gè)記錄數(shù)據(jù)構(gòu)造器,用于創(chuàng)建一個(gè)記錄數(shù)據(jù)對(duì)象并創(chuàng)建一個(gè)由列名鍵控的列數(shù)據(jù)對(duì)象的集合;一個(gè)獲得列數(shù)據(jù)的方法,用于檢索一個(gè)特定的列數(shù)據(jù)對(duì)象;一個(gè)獲得記錄號(hào)的方法,用于獲得表示一個(gè)記錄數(shù)據(jù)對(duì)象的記錄號(hào);一個(gè)記錄是否已被修改的方法,用于判定一個(gè)記錄對(duì)象的一個(gè)或多個(gè)列是否已被修改;一個(gè)獲得未決操作的方法,用于決定對(duì)于一個(gè)記錄對(duì)象的未決操作;和一個(gè)設(shè)置未決操作的方法,用于標(biāo)記記錄為新建的還是已刪除的。
8.如權(quán)利要求7所述的可擴(kuò)展框架系統(tǒng),所述記錄數(shù)據(jù)類具有作為保護(hù)數(shù)據(jù)成員的由列名和列號(hào)鍵控的列數(shù)據(jù)對(duì)象的集合,記錄號(hào),未決操作,和一個(gè)對(duì)所述數(shù)據(jù)庫管理器對(duì)象的引用。
9.如權(quán)利要求3所述的可擴(kuò)展框架系統(tǒng),所述列數(shù)據(jù)類還包括一個(gè)列數(shù)據(jù)構(gòu)造器,用于建立一個(gè)列數(shù)據(jù)對(duì)象;一個(gè)獲得列名的方法,用于獲得列名;一個(gè)獲得列號(hào)的方法,用于獲得列號(hào);一個(gè)獲得列數(shù)據(jù)類型的方法,用于獲得一列的數(shù)據(jù)類型;一個(gè)是否已修改的方法,用于判定數(shù)據(jù)是否已被修改;一個(gè)獲得列數(shù)據(jù)的方法,用于返回一列的數(shù)據(jù);和一個(gè)設(shè)置列數(shù)據(jù)的方法,用于設(shè)置一列的數(shù)據(jù)。
10.如權(quán)利要求10所述的可擴(kuò)展框架系統(tǒng),所述列數(shù)據(jù)類具有作為保護(hù)數(shù)據(jù)成員的列名,列數(shù)據(jù)類型,修改標(biāo)記和列號(hào)。
11.如權(quán)利要求3所述的可擴(kuò)展框架系統(tǒng),所述特定文件類提供基類功能并且所述特定文件類還包括一個(gè)特定文件構(gòu)造器,用于建立一個(gè)表示將被操縱的文件的文件對(duì)象并創(chuàng)建所述數(shù)據(jù)庫管理器對(duì)象;一個(gè)新建方法,用于在一個(gè)空數(shù)據(jù)文件中創(chuàng)建一個(gè)成員;一個(gè)第一打開方法,用于調(diào)用所述數(shù)據(jù)管理器的第二打開方法打開一個(gè)文件;一個(gè)第一關(guān)閉方法,用于調(diào)用所述數(shù)據(jù)管理器的第二關(guān)閉方法關(guān)閉一個(gè)文件;一個(gè)獲得列總數(shù)的方法,用于決定一個(gè)文件中的列的數(shù)目;一個(gè)獲得列名的方法,用于獲得一個(gè)列的名稱;一個(gè)第一提交方法,用于調(diào)用所述數(shù)據(jù)管理器的第二提交方法把改變提交給一個(gè)文件;一個(gè)第一讀取記錄的方法,用于調(diào)用所述數(shù)據(jù)管理器的第二讀取記錄的方法讀取一條特定的記錄;一個(gè)第一設(shè)置列數(shù)據(jù)的方法,用于調(diào)用所述數(shù)據(jù)管理器的第二設(shè)置列數(shù)據(jù)的方法設(shè)置一個(gè)特定列的數(shù)據(jù);一個(gè)第一添加記錄的方法,用于調(diào)用所述數(shù)據(jù)管理器的第二添加記錄的方法,以添加一條以后可通過特定設(shè)置方法進(jìn)行設(shè)置的空記錄;一個(gè)第一刪除記錄方法,用于調(diào)用所述數(shù)據(jù)管理器的第二刪除記錄的方法把特定記錄標(biāo)記為已刪除狀態(tài);和一個(gè)第一全刪除記錄的方法,用于調(diào)用所述數(shù)據(jù)管理器的第二全刪除記錄的方法把一個(gè)文件中的所有記錄都標(biāo)記成已刪除狀態(tài)。
12.如權(quán)利要求10所述的可擴(kuò)展框架系統(tǒng),所述特定文件類具有作為保護(hù)數(shù)據(jù)成員的一個(gè)數(shù)據(jù)庫管理器對(duì)象指針,一個(gè)命令棧對(duì)象指針,一個(gè)或多個(gè)對(duì)象指針,一個(gè)庫,一個(gè)文件,一個(gè)成員名,一個(gè)路徑和一個(gè)系統(tǒng)名。
13.一種機(jī)器可讀的程序存儲(chǔ)器設(shè)備實(shí)際上包括一個(gè)指令程序,該指令程序可由機(jī)器執(zhí)行以實(shí)現(xiàn)用于操縱數(shù)據(jù)的方法步驟,所述方法步驟包括在一個(gè)可擴(kuò)展框架中以一種動(dòng)態(tài)的基于對(duì)象的格式為數(shù)據(jù)操縱建立一個(gè)統(tǒng)一的接口,所述框架包括一個(gè)接口和一個(gè)特定文件類,其中特定文件類定義了一個(gè)用于管理所述數(shù)據(jù)的基于對(duì)象的方法;操作所述特定文件類,以包括所述數(shù)據(jù)庫管理器類并為訪問者訪問關(guān)系數(shù)據(jù)提供一個(gè)統(tǒng)一的接口;和操作所述特定文件類,以管理對(duì)以對(duì)象形式進(jìn)行存儲(chǔ)的信息的向量化訪問。
14.一個(gè)制造產(chǎn)品包括一種具有用于操縱數(shù)據(jù)的計(jì)算機(jī)可讀程序編碼裝置的計(jì)算機(jī)可用介質(zhì),其中所述制造條款中的計(jì)算機(jī)可讀程序裝置包括計(jì)算機(jī)可讀程序編碼裝置,用于使計(jì)算機(jī)在一個(gè)可擴(kuò)展框架中以一種動(dòng)態(tài)的基于對(duì)象的格式為數(shù)據(jù)操縱建立一個(gè)統(tǒng)一的接口,所述框架包括一個(gè)接口和一個(gè)特定文件類,其中特定文件類定義了一個(gè)用于管理所述數(shù)據(jù)的基于對(duì)象的方法;計(jì)算機(jī)可讀程序編碼裝置,用于使計(jì)算機(jī)操作所述特定文件類,以包括所述數(shù)據(jù)庫管理器類并為訪問者訪問關(guān)系數(shù)據(jù)提供一個(gè)統(tǒng)一的接口;和計(jì)算機(jī)可讀程序編碼裝置,用于使計(jì)算機(jī)操作所述特定文件類,以管理對(duì)以對(duì)象形式進(jìn)行存儲(chǔ)的信息的向量化訪問。
15.如權(quán)利要求1所述的方法,該方法還包括以下步驟操作所述特定文件類,以為訪問者選擇性地管理結(jié)構(gòu)化數(shù)據(jù)和非結(jié)構(gòu)化數(shù)據(jù)提供一個(gè)統(tǒng)一的接口。
全文摘要
一種用于操縱數(shù)據(jù)的方法,包括以下步驟:在一個(gè)可擴(kuò)展框架中以一種動(dòng)態(tài)的基于對(duì)象的形式為數(shù)據(jù)操縱建立一個(gè)統(tǒng)一的接口,所述框架包括一個(gè)接口和一個(gè)特定文件類,其中特定文件類定義了一個(gè)用于管理所述數(shù)據(jù)的基于對(duì)象的方法;操作所述特定文件類,以包括所述數(shù)據(jù)庫管理器類并為訪問者訪問關(guān)系數(shù)據(jù)提供一個(gè)統(tǒng)一的接口;和操作所述特定文件類,以管理對(duì)以對(duì)象形式進(jìn)行存儲(chǔ)的信息的向量化訪問。
文檔編號(hào)G06F17/30GK1263314SQ99127098
公開日2000年8月16日 申請(qǐng)日期1999年12月29日 優(yōu)先權(quán)日1999年2月9日
發(fā)明者羅伯特·C·漢森, 斯科特·A·西爾威斯特 申請(qǐng)人:國際商業(yè)機(jī)器公司