數據庫Left join , Right Join, Inner Join 的相干內容,異常適用。本站提示廣大學習愛好者:(數據庫Left join , Right Join, Inner Join 的相干內容,異常適用)文章只能為提供參考,不一定能成為您想要的結果。以下是數據庫Left join , Right Join, Inner Join 的相干內容,異常適用正文
數據轉換抵觸及處置
數據轉換抵觸:
在數據轉換進程中,要想完成嚴厲的等價轉換是比擬艱苦的。必需要肯定兩種模子中所存在的各類語法和語義上的抵觸,這些抵觸能夠包含:
(1)定名抵觸:源數據源的標識符能夠是目標數據源中的保存字。
(2)格局抵觸:統一種數據類型能夠有分歧的表現辦法和語義差別。
(3)構造抵觸:假如兩種DBMS之間的數據界說模子分歧,如為關系模子和條理模子,則須要從新界說實體屬性和接洽,以避免屬性或接洽信息的喪失。
(4)類型抵觸:分歧數據庫的統一種數據類型存在精度之間的差別。
(5)其他抵觸:分歧數據庫的年夜對象類型存在分歧的束縛,並且存在一些特別類型。如SQL SERVER中一個表中有多於一個TEXT或IMAGE的字段時,湧現毛病。而ORACLE也不許可一個表中的BLOB和LONG類型多於一個。
抵觸處置辦法:
關於以上數據轉換中的抵觸,可停止響應的抵觸處置。
關於定名抵觸,可以先檢討數據源中的保存字,樹立保存字聚集,關於保存字中的定名抵觸,依據須要從新定名。
關於格局抵觸,可以依據ODBC SQL類型從數據源的驅動法式中掏出絕對應的數據源的數據類型後,對一些特定的類型停止特別的處置。關於字符型數據中含有“'”字符的情形,在數據轉換進程中需經由過程本義符作特別處置,不然會把它誤看成字符串分隔符。
關於分歧數據庫的統一數據類型的精度抵觸,類型轉換中將ODBC SQL類型和精度聯合起來決議源數據類型和目的數據類型的映照關系。找出目標數據源中與源數據源類型的精度最婚配的數據類型作為缺省的映照關系。
轉換進程中的數據類型婚配,日期型數據最好先轉換成字符型,然後依據分歧的目的數據源分離作分歧的處置。如ORACLE中應用TO_DATE函數,而FOXPRO中應用CTOD函數將日期格局的字符串轉換成日期。
關於SQL SERVER中的TEXT、IMAGE類型,在停止轉換時須要做出選擇,或許把TEXT鏡像為VARchar2(4000),或許鏡像為LONG 類型,但Long 類型一個內外只能有一個。關於ORACLE,TEXT類型可以映像為CLOB類型,而IMAGE可以鏡像為BLOB。CLOB類型可以在一個ORACLE內外有多列。
讀取數據源的元數據
數據源的元數據類型
元數據品種 元數據信息 用處
數據源銜接信息 數據庫名,驅動器, 用於銜接源數據源和目標數據源
辦事器,DSN名,
數據源描寫,用戶名等
表信息 表名,表屬主, 用於數據轉換中創立表
表形式,表類型
列信息 列名,類型,寬度, 用於數據轉換中表的創立和列映照
精度,標度,能否為空
類型信息 類型名,最年夜列寬度, 用於數據轉換中表的創立和類型映照
最年夜最小標度,
前後綴字符,
能否接收空,
症結字列表
鍵信息 主鍵名,主鍵列, 用於數據轉換中表形式的轉換
外鍵名,外鍵列,
外鍵聯系關系列
其它對象信息:索引信息,存儲進程信息,權限信息等 用於數據轉換中數據庫對象的轉換。
數據源的元數據讀取辦法:
(1)挪用ODBC API函數:
可以直接挪用ODBC API函數讀取數據源的元數據。即分離挪用以下函數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取得數據源中的表信息,列信息,類型信息,鍵信息和其他對象信息等。其重要步調是銜接數據源,分派語句句柄,然後挪用ODBC API來獲得各類元數據信息。
但是直接挪用ODBC API函數比擬龐雜,各類參數不容易懂得,且直接獲得前往的數據較艱苦。VC++的MFC類庫對ODBC的API停止封裝,部門簡化了ODBC挪用(特別是對數據庫記載集的操作),但純真應用MFC類獲得異構型數據庫的構造信息依然比擬艱苦,是以須要將MFC和直接挪用ODBC API辦法聯合起來。應用ODBC接口函數重載了MFC中CRecordset類的部門成員函數,創立CTable,CColumns,CTypes,CPrimaryKeys等類。應用這些新創立的類,可以很便利的獲得異構型數據庫構造信息。
(2)經由過程ADO對象:
經由過程ADO中CONNECTION對象的GetTableNames 辦法可以獲得數據源的表信息,而經由過程ADO中RECORDSET對象中的FieldDefs屬性可以獲得數據集的各類列信息和類型信息。在獲得數據源的元數據前,必需先創立CONNECTION對象銜接數據源,並經由過程數據集對象RECORDSET來翻開響應的數據表,以後便可以獲得響應的數據源的元數據。
數據類型轉換
3異構數據源數據類型概述:
對分歧數據庫體系,每一個DBMS都界說了一套本身的數據類型,但豈論數據類型在各個體系中若何變更,其功效都知足用戶的數據處置根本請求,如數值型,包含整型、實型、浮點型、雙精度型等;字符型,包含定長、變長等;日期型,包含年、月、日和小時、分、秒等;長字符型,包含文本類型,還有貨幣型等。跟著數據庫體系的赓續成長和版本的赓續進級,數據類型的品種也赓續增多,如超文本和二進制處置多媒體和年夜文本的數據類型。這些帶有個性的器械,給體系間的數據轉換帶來了能夠和便利,但分歧的數據庫的數據類型也是有差別的。其本身界說和擴大之間的差別,也給體系間的數據轉換帶來了很多艱苦。例如,DBMS前往的日期和時光數據格局在各個DBMS中有很年夜的分歧。有些體系以8字節整數格局前往日期和時光,別的一些以浮點數格局前往。而且有的DBMS含有LONG類型,其它DBMS無此類型。所以異種數據庫數據類型轉換的症結是找出個中的對應關系。
數據類型轉換辦法一:(設計類型映照表)
為了完成互相數據轉換,必需設計多個響應的雙向數據轉換法式而且處理分歧的數據類型婚配成績。當增長一個數據庫體系時,響應要處理該數據庫體系與已存在的多個異構庫的數據類型婚配成績,並增長多個對應轉換法式。為了完成法式的擴大性,可以經由過程設計類型映照表來處理類型轉換成績。
將分歧數據庫體系數據類型的對應關系和響應的數據轉換處置法式分別開,使數據轉換法式絕對自力,而把類型轉換關系在專門的表構造中存儲。經由過程對分歧數據庫體系之間的數據類型停止具體而深刻的剖析,找出了分歧數據庫體系分歧版本的各個分歧類型之間缺省的類型對應關系及能夠存在的對應關系,將這些數據事後存入類型映照表中。
數據類型轉換辦法二:(應用ODBC SQL類型)
存儲在數據源中的數據都有一個數據類型,稱為數據源數據類型或SQL數據類型。SQL數據類型是依照SQL-92尺度由每個DBMS界說,可所以某個數據源獨有的。驅動法式在ODBC SQL語法及驅動法式數據類型中也界說了一套數據類型稱為ODBC SQL數據類型(以SQL前綴開首的數據類型)。每一個驅動法式擔任映照特定命據起源的SQL數據類型到ODBC SQL數據類型標識符。是以,分歧的數據源在停止數據轉換的進程中可以經由過程ODBC SQL數據類型標識符作為基准來獲得數據類型的缺省映照關系。驅動法式經由過程函數SQLGetTypelnfo前往數據源的SQL數據類型和ODBC SQL數據類型的映照關系,在函數SQLCo1Attributes,SQLDescribeCol和 SQLDescribeParm中,驅動法式還用ODBC SQL數據類型來描寫列和參數的數據類型。
另外,ODBC還供給一套以SQL_C前綴開首的ODBC C數據類型。ODBC C數據類型指出了在運用法式頂用於存儲數據的C緩沖區的數據類型。一切驅動法式必需支撐一切的C數據類型,並且支撐一切C類型到響應的SQL類型的轉換,而且一切的驅動法式至多支撐字符SQL類型,使得DBMS的數據類型都能映照到一種C說話的數據類型,如許在傳遞進程中不會轉變數據。每個SQL數據類型與一個ODBC C數據類型相順應。在從數據源前往數據之前,驅動法式將它轉換到指定的C數據類型。在發送數據到數據起源之前,驅動法式將它從指定C數據類型轉換到SQL數據類型。
數據轉換進程中年夜對象的處置
年夜對象類型概述:
年夜對象類型BLOB全稱為Binary Large Objects,即二進制年夜對象。可以把BLOB差別為三種情勢:聲像數據、二進制數據和年夜文本數據。是以,最多見的運用就是存儲圖形、聲響等對象,另外年夜二進制對象、OLE對象也能夠經由過程BLOB類型存入數據庫,假如文本對象過年夜,超越了文本類型的劃定長度,則必需用BLOB字段停止存儲。我們在常常應用的編程情況中其實不能直接支撐BLOB字段,是以須要挪用響應的函數完成BLOB的應用。
分歧的數據庫體系對年夜對象類型的支撐分歧,經常使用數據庫體系支撐的年夜對象數據類型如表4所示:
數據庫體系支撐的年夜對象數據類型:
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"
年夜對象的存取辦法:
(1)應用MFC供給的CLongBinary類:
VC存取年夜對象數據有浩瀚辦法,如OLE、ActiveX等,而VC的MFC供給的CLongBinary類可以便利地完成存取BLOB字段。應用CLongBinary類可以存取跨越MAXINT數量的數據,最年夜為可以獲得的內存容量。但數據完整保留在內存中,對超年夜量數據消費太年夜。
(2)應用ODBC的SQLGetData和SQLPutData函數:
關於不克不及存儲在單一緩沖區中的數據,外行中的其他數據已被獲得以後,可以直接用SQLGetData分批從驅動法式檢索這些數據。為了從一列檢索長數據,運用法式起首挪用SQLFetchScroll或SQLFetch挪動一行,而且挪用SQLGetData獲得綁定列的數據。SQLPutData許可在運用法式語句履行時,把參數或字段送到驅動法式。該函數用來把字符或二進制數值送到。