国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發(fā) > 綜合 > 正文

中關(guān)鍵技術(shù)及難點(diǎn)

2024-07-21 02:39:00
字體:
供稿:網(wǎng)友

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

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 会东县| 资中县| 巩义市| 昭通市| 天水市| 镇巴县| 淳安县| 浙江省| 仪征市| 甘泉县| 崇礼县| 香港| 南昌市| 麻栗坡县| 崇文区| 青海省| 仲巴县| 孟州市| 香港 | 平塘县| 镇江市| 龙州县| 保德县| 托里县| 德兴市| 万山特区| 盘锦市| 梧州市| 林甸县| 夹江县| 海晏县| 邢台市| 长寿区| 公主岭市| 太湖县| 沭阳县| 北宁市| 筠连县| 崇仁县| 泌阳县| 望江县|