人妖在线一区,国产日韩欧美一区二区综合在线,国产啪精品视频网站免费,欧美内射深插日本少妇

新聞動(dòng)態(tài)

數(shù)據(jù)轉(zhuǎn)換沖突及轉(zhuǎn)換過(guò)程中大對(duì)象的處理

發(fā)布日期:2022-02-01 09:01 | 文章來(lái)源:源碼中國(guó)

數(shù)據(jù)轉(zhuǎn)換沖突及處理
  數(shù)據(jù)轉(zhuǎn)換沖突:
  在數(shù)據(jù)轉(zhuǎn)換過(guò)程中,要想實(shí)現(xiàn)嚴(yán)格的等價(jià)轉(zhuǎn)換是比較困難的。必須要確定兩種模型中所存在的各種語(yǔ)法和語(yǔ)義上的沖突,這些沖突可能包括:
  (1)命名沖突:源數(shù)據(jù)源的標(biāo)識(shí)符可能是目的數(shù)據(jù)源中的保留字。
  (2)格式?jīng)_突:同一種數(shù)據(jù)類型可能有不同的表示方法和語(yǔ)義差異。
  (3)結(jié)構(gòu)沖突:如果兩種DBMS之間的數(shù)據(jù)定義模型不同,如為關(guān)系模型和層次模型,則需要重新定義實(shí)體屬性和聯(lián)系,以防止屬性或聯(lián)系信息的丟失。
  (4)類型沖突:不同數(shù)據(jù)庫(kù)的同一種數(shù)據(jù)類型存在精度之間的差異。
  (5)其他沖突:不同數(shù)據(jù)庫(kù)的大對(duì)象類型存在不同的約束,而且存在一些特殊類型。如SQL SERVER中一個(gè)表中有多于一個(gè)TEXT或IMAGE的字段時(shí),出現(xiàn)錯(cuò)誤。而ORACLE也不允許一個(gè)表中的BLOB和LONG類型多于一個(gè)。
  沖突處理方法:
  對(duì)于以上數(shù)據(jù)轉(zhuǎn)換中的沖突,可進(jìn)行相應(yīng)的沖突處理。
  對(duì)于命名沖突,可以先檢查數(shù)據(jù)源中的保留字,建立保留字集合,對(duì)于保留字中的命名沖突,根據(jù)需要重新命名。
  對(duì)于格式?jīng)_突,可以根據(jù)ODBC SQL類型從數(shù)據(jù)源的驅(qū)動(dòng)程序中取出相對(duì)應(yīng)的數(shù)據(jù)源的數(shù)據(jù)類型后,對(duì)一些特定的類型進(jìn)行特殊的處理。對(duì)于字符型數(shù)據(jù)中含有“'”字符的情況,在數(shù)據(jù)轉(zhuǎn)換過(guò)程中需通過(guò)轉(zhuǎn)義符作特殊處理,否則會(huì)把它誤當(dāng)作字符串分隔符。
  對(duì)于不同數(shù)據(jù)庫(kù)的同一數(shù)據(jù)類型的精度沖突,類型轉(zhuǎn)換中將ODBC SQL類型和精度結(jié)合起來(lái)決定源數(shù)據(jù)類型和目標(biāo)數(shù)據(jù)類型的映射關(guān)系。找出目的數(shù)據(jù)源中與源數(shù)據(jù)源類型的精度最匹配的數(shù)據(jù)類型作為缺省的映射關(guān)系。
  轉(zhuǎn)換過(guò)程中的數(shù)據(jù)類型匹配,日期型數(shù)據(jù)最好先轉(zhuǎn)換成字符型,然后根據(jù)不同的目標(biāo)數(shù)據(jù)源分別作不同的處理。如ORACLE中使用TO_DATE函數(shù),而FOXPRO中使用CTOD函數(shù)將日期格式的字符串轉(zhuǎn)換成日期。
  對(duì)于SQL SERVER中的TEXT、IMAGE類型,在進(jìn)行轉(zhuǎn)換時(shí)需要做出選擇,或者把TEXT鏡像為VARchar2(4000),或者鏡像為L(zhǎng)ONG 類型,但Long 類型一個(gè)表里只能有一個(gè)。對(duì)于ORACLE,TEXT類型可以映像為CLOB類型,而IMAGE可以鏡像為BLOB。CLOB類型可以在一個(gè)ORACLE表里有多列。
  讀取數(shù)據(jù)源的元數(shù)據(jù)
  數(shù)據(jù)源的元數(shù)據(jù)類型
  元數(shù)據(jù)種類 元數(shù)據(jù)信息 用途
  數(shù)據(jù)源連接信息 數(shù)據(jù)庫(kù)名,驅(qū)動(dòng)器, 用于連接源數(shù)據(jù)源和目的數(shù)據(jù)源
  服務(wù)器,DSN名,
  數(shù)據(jù)源描述,用戶名等
  表信息 表名,表屬主, 用于數(shù)據(jù)轉(zhuǎn)換中創(chuàng)建表
  表模式,表類型
  列信息 列名,類型,寬度, 用于數(shù)據(jù)轉(zhuǎn)換中表的創(chuàng)建以及列映射
  精度,標(biāo)度,是否為空
  類型信息 類型名,最大列寬度, 用于數(shù)據(jù)轉(zhuǎn)換中表的創(chuàng)建以及類型映射
  最大最小標(biāo)度,
  前后綴字符,
  是否接受空,
  關(guān)鍵字列表
  鍵信息 主鍵名,主鍵列, 用于數(shù)據(jù)轉(zhuǎn)換中表模式的轉(zhuǎn)換
  外鍵名,外鍵列,
  外鍵關(guān)聯(lián)列
  其它對(duì)象信息:索引信息,存儲(chǔ)過(guò)程信息,權(quán)限信息等 用于數(shù)據(jù)轉(zhuǎn)換中數(shù)據(jù)庫(kù)對(duì)象的轉(zhuǎn)換。
  數(shù)據(jù)源的元數(shù)據(jù)讀取方法:
 ?。?)調(diào)用ODBC API函數(shù):
  可以直接調(diào)用ODBC API函數(shù)讀取數(shù)據(jù)源的元數(shù)據(jù)。即分別調(diào)用以下函數(shù)SQL Tables,SQL Columns, SQL DescribeCol,SQL Get TypeInfo,SQL Foreign Keys,SQLPrimary Keys,SQL ProcedureColumns,SQL Procedures, SQL Statistics,SQL TablePrivileges,SQL Column Privileges獲得數(shù)據(jù)源中的表信息,列信息,類型信息,鍵信息以及其他對(duì)象信息等。其主要步驟是連接數(shù)據(jù)源,分配語(yǔ)句句柄,然后調(diào)用ODBC API來(lái)獲取各種元數(shù)據(jù)信息。
  然而直接調(diào)用ODBC API函數(shù)比較復(fù)雜,各種參數(shù)不易理解,且直接獲取返回的數(shù)據(jù)較困難。VC++的MFC類庫(kù)對(duì)ODBC的API進(jìn)行封裝,部分簡(jiǎn)化了ODBC調(diào)用(尤其是對(duì)數(shù)據(jù)庫(kù)記錄集的操作),但單純利用MFC類獲取異構(gòu)型數(shù)據(jù)庫(kù)的結(jié)構(gòu)信息仍然比較困難,因此需要將MFC和直接調(diào)用ODBC API方法結(jié)合起來(lái)。利用ODBC接口函數(shù)重載了MFC中CRecordset類的部分成員函數(shù),創(chuàng)建CTable,CColumns,CTypes,CPrimaryKeys等類。利用這些新創(chuàng)建的類,可以很方便的獲取異構(gòu)型數(shù)據(jù)庫(kù)結(jié)構(gòu)信息。
 ?。?)通過(guò)ADO對(duì)象:
  通過(guò)ADO中CONNECTION對(duì)象的GetTableNames 方法可以得到數(shù)據(jù)源的表信息,而通過(guò)ADO中RECORDSET對(duì)象中的FieldDefs屬性可以得到數(shù)據(jù)集的各種列信息和類型信息。在得到數(shù)據(jù)源的元數(shù)據(jù)前,必須先創(chuàng)建CONNECTION對(duì)象連接數(shù)據(jù)源,并通過(guò)數(shù)據(jù)集對(duì)象RECORDSET來(lái)打開相應(yīng)的數(shù)據(jù)表,之后即可以取得相應(yīng)的數(shù)據(jù)源的元數(shù)據(jù)。
  數(shù)據(jù)類型轉(zhuǎn)換
  3異構(gòu)數(shù)據(jù)源數(shù)據(jù)類型概述:
  對(duì)不同數(shù)據(jù)庫(kù)系統(tǒng),每個(gè)DBMS都定義了一套自己的數(shù)據(jù)類型,但不論數(shù)據(jù)類型在各個(gè)系統(tǒng)中如何變化,其功能都滿足用戶的數(shù)據(jù)處理基本要求,如數(shù)值型,包括整型、實(shí)型、浮點(diǎn)型、雙精度型等;字符型,包括定長(zhǎng)、變長(zhǎng)等;日期型,包括年、月、日和小時(shí)、分、秒等;長(zhǎng)字符型,包括文本類型,還有錢幣型等。隨著數(shù)據(jù)庫(kù)系統(tǒng)的不斷發(fā)展和版本的不斷升級(jí),數(shù)據(jù)類型的種類也不斷增多,如超文本和二進(jìn)制處理多媒體和大文本的數(shù)據(jù)類型。這些帶有共性的東西,給系統(tǒng)間的數(shù)據(jù)轉(zhuǎn)換帶來(lái)了可能和方便,但不同的數(shù)據(jù)庫(kù)的數(shù)據(jù)類型也是有差異的。其自身定義和擴(kuò)充之間的區(qū)別,也給系統(tǒng)間的數(shù)據(jù)轉(zhuǎn)換帶來(lái)了許多困難。例如,DBMS返回的日期和時(shí)間數(shù)據(jù)格式在各個(gè)DBMS中有很大的不同。有些系統(tǒng)以8字節(jié)整數(shù)格式返回日期和時(shí)間,另外一些以浮點(diǎn)數(shù)格式返回。并且有的DBMS含有LONG類型,其它DBMS無(wú)此類型。所以異種數(shù)據(jù)庫(kù)數(shù)據(jù)類型轉(zhuǎn)換的關(guān)鍵是找出其中的對(duì)應(yīng)關(guān)系。
  數(shù)據(jù)類型轉(zhuǎn)換方法一:(設(shè)計(jì)類型映射表)
  為了實(shí)現(xiàn)相互數(shù)據(jù)轉(zhuǎn)換,必須設(shè)計(jì)多個(gè)相應(yīng)的雙向數(shù)據(jù)轉(zhuǎn)換程序并且解決不同的數(shù)據(jù)類型匹配問(wèn)題。當(dāng)增加一個(gè)數(shù)據(jù)庫(kù)系統(tǒng)時(shí),相應(yīng)要解決該數(shù)據(jù)庫(kù)系統(tǒng)與已存在的多個(gè)異構(gòu)庫(kù)的數(shù)據(jù)類型匹配問(wèn)題,并增加多個(gè)對(duì)應(yīng)轉(zhuǎn)換程序。為了實(shí)現(xiàn)程序的擴(kuò)展性,可以通過(guò)設(shè)計(jì)類型映射表來(lái)解決類型轉(zhuǎn)換問(wèn)題。
  將不同數(shù)據(jù)庫(kù)系統(tǒng)數(shù)據(jù)類型的對(duì)應(yīng)關(guān)系和相應(yīng)的數(shù)據(jù)轉(zhuǎn)換處理程序分離開,使數(shù)據(jù)轉(zhuǎn)換程序相對(duì)獨(dú)立,而把類型轉(zhuǎn)換關(guān)系在專門的表結(jié)構(gòu)中存儲(chǔ)。通過(guò)對(duì)不同數(shù)據(jù)庫(kù)系統(tǒng)之間的數(shù)據(jù)類型進(jìn)行詳細(xì)而深入的分析,找出了不同數(shù)據(jù)庫(kù)系統(tǒng)不同版本的各個(gè)不同類型之間缺省的類型對(duì)應(yīng)關(guān)系及可能存在的對(duì)應(yīng)關(guān)系,將這些數(shù)據(jù)預(yù)先存入類型映射表中。
  數(shù)據(jù)類型轉(zhuǎn)換方法二:(利用ODBC SQL類型)
  存儲(chǔ)在數(shù)據(jù)源中的數(shù)據(jù)都有一個(gè)數(shù)據(jù)類型,稱為數(shù)據(jù)源數(shù)據(jù)類型或SQL數(shù)據(jù)類型。SQL數(shù)據(jù)類型是按照SQL-92標(biāo)準(zhǔn)由每一個(gè)DBMS定義,可以是某個(gè)數(shù)據(jù)源特有的。驅(qū)動(dòng)程序在ODBC SQL語(yǔ)法及驅(qū)動(dòng)程序數(shù)據(jù)類型中也定義了一套數(shù)據(jù)類型稱為ODBC SQL數(shù)據(jù)類型(以SQL前綴開頭的數(shù)據(jù)類型)。每個(gè)驅(qū)動(dòng)程序負(fù)責(zé)映射特定數(shù)據(jù)來(lái)源的SQL數(shù)據(jù)類型到ODBC SQL數(shù)據(jù)類型標(biāo)識(shí)符。因此,不同的數(shù)據(jù)源在進(jìn)行數(shù)據(jù)轉(zhuǎn)換的過(guò)程中可以通過(guò)ODBC SQL數(shù)據(jù)類型標(biāo)識(shí)符作為基準(zhǔn)來(lái)得到數(shù)據(jù)類型的缺省映射關(guān)系。驅(qū)動(dòng)程序通過(guò)函數(shù)SQLGetTypelnfo返回?cái)?shù)據(jù)源的SQL數(shù)據(jù)類型和ODBC SQL數(shù)據(jù)類型的映射關(guān)系,在函數(shù)SQLCo1Attributes,SQLDescribeCol和 SQLDescribeParm中,驅(qū)動(dòng)程序還用ODBC SQL數(shù)據(jù)類型來(lái)描述列和參數(shù)的數(shù)據(jù)類型。
  此外,ODBC還提供一套以SQL_C前綴開頭的ODBC C數(shù)據(jù)類型。ODBC C數(shù)據(jù)類型指出了在應(yīng)用程序中用于存儲(chǔ)數(shù)據(jù)的C緩沖區(qū)的數(shù)據(jù)類型。所有驅(qū)動(dòng)程序必須支持所有的C數(shù)據(jù)類型,而且支持所有C類型到相應(yīng)的SQL類型的轉(zhuǎn)換,并且所有的驅(qū)動(dòng)程序至少支持字符SQL類型,使得DBMS的數(shù)據(jù)類型都能映射到一種C語(yǔ)言的數(shù)據(jù)類型,這樣在傳遞過(guò)程中不會(huì)改變數(shù)據(jù)。每一個(gè)SQL數(shù)據(jù)類型與一個(gè)ODBC C數(shù)據(jù)類型相適應(yīng)。在從數(shù)據(jù)源返回?cái)?shù)據(jù)之前,驅(qū)動(dòng)程序?qū)⑺D(zhuǎn)換到指定的C數(shù)據(jù)類型。在發(fā)送數(shù)據(jù)到數(shù)據(jù)來(lái)源之前,驅(qū)動(dòng)程序?qū)⑺鼜闹付–數(shù)據(jù)類型轉(zhuǎn)換到SQL數(shù)據(jù)類型。
  數(shù)據(jù)轉(zhuǎn)換過(guò)程中大對(duì)象的處理
  大對(duì)象類型概述:
  大對(duì)象類型BLOB全稱為Binary Large Objects,即二進(jìn)制大對(duì)象??梢园袯LOB區(qū)別為三種形式:聲像數(shù)據(jù)、二進(jìn)制數(shù)據(jù)和大文本數(shù)據(jù)。因此,最常見的應(yīng)用就是存儲(chǔ)圖形、聲音等對(duì)象,此外大二進(jìn)制對(duì)象、OLE對(duì)象也可以通過(guò)BLOB類型存入數(shù)據(jù)庫(kù),如果文本對(duì)象過(guò)大,超出了文本類型的規(guī)定長(zhǎng)度,則必須用BLOB字段進(jìn)行存儲(chǔ)。我們?cè)诮?jīng)常使用的編程環(huán)境中并不能直接支持BLOB字段,因此需要調(diào)用相應(yīng)的函數(shù)完成BLOB的使用。
  不同的數(shù)據(jù)庫(kù)系統(tǒng)對(duì)大對(duì)象類型的支持不同,常用數(shù)據(jù)庫(kù)系統(tǒng)支持的大對(duì)象數(shù)據(jù)類型如表4所示:
  數(shù)據(jù)庫(kù)系統(tǒng)支持的大對(duì)象數(shù)據(jù)類型:
  SQL SERVER "sql_varia
  SYBASE "LONG VARchar"
  VFP "MEMO"
  ACCESS "OLE OBJECT","MEMO"
  KINGBASE "blob","text","bytea","varbinary","binary","text"
  大對(duì)象的存取方法:
  (1)利用MFC提供的CLongBinary類:
  VC存取大對(duì)象數(shù)據(jù)有眾多方法,如OLE、ActiveX等,而VC的MFC提供的CLongBinary類可以方便地實(shí)現(xiàn)存取BLOB字段。使用CLongBinary類可以存取超過(guò)MAXINT數(shù)目的數(shù)據(jù),最大為可以得到的內(nèi)存容量。但數(shù)據(jù)完全保存在內(nèi)存中,對(duì)超大量數(shù)據(jù)消耗太大。
  (2)利用ODBC的SQLGetData和SQLPutData函數(shù):
  對(duì)于不能存儲(chǔ)在單一緩沖區(qū)中的數(shù)據(jù),在行中的其他數(shù)據(jù)已被獲取之后,可以直接用SQLGetData分批從驅(qū)動(dòng)程序檢索這些數(shù)據(jù)。為了從一列檢索長(zhǎng)數(shù)據(jù),應(yīng)用程序首先調(diào)用SQLFetchScroll或SQLFetch移動(dòng)一行,并且調(diào)用SQLGetData獲取綁定列的數(shù)據(jù)。SQLPutData允許在應(yīng)用程序語(yǔ)句執(zhí)行時(shí),把參數(shù)或字段送到驅(qū)動(dòng)程序。該函數(shù)用來(lái)把字符或二進(jìn)制數(shù)值送到。

香港穩(wěn)定服務(wù)器

版權(quán)聲明:本站文章來(lái)源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請(qǐng)保持原文完整并注明來(lái)源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非www.sddonglingsh.com所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來(lái)源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來(lái),僅供學(xué)習(xí)參考,不代表本站立場(chǎng),如有內(nèi)容涉嫌侵權(quán),請(qǐng)聯(lián)系alex-e#qq.com處理。

相關(guān)文章

實(shí)時(shí)開通

自選配置、實(shí)時(shí)開通

免備案

全球線路精選!

全天候客戶服務(wù)

7x24全年不間斷在線

專屬顧問(wèn)服務(wù)

1對(duì)1客戶咨詢顧問(wèn)

在線
客服

在線客服:7*24小時(shí)在線

客服
熱線

400-630-3752
7*24小時(shí)客服服務(wù)熱線

關(guān)注
微信

關(guān)注官方微信
頂部