数据转换冲突及转换过程中大对象的处理方法,大家可以参考下。
数据转换冲突及处理
数据转换冲突:
在数据转换过程中,要想实现严格的等价转换是比较困难的。必须要确定两种模型中所存在的各种语法和语义上的冲突,这些冲突可能包括:
(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允许在应用程序语句执行时,把参数或字段送到驱动程序。该函数用来把字符或二进制数值送到。

NumPy库是Python中用于科学计算和数据分析的重要库之一。然而,有时候我们可能需要卸载NumPy库,可能是因为需要升级版本或者解决与其他库的冲突问题。本文将向读者介绍如何正确地卸载NumPy库,以避免可能出现的冲突和错误,并通过具体的代码示例来演示操作过程。在开始卸载NumPy库之前,我们需要确保已经安装了pip工具,因为pip是Python的包管理工

Python是一种高级编程语言,被广泛应用于数据科学、机器学习和人工智能等领域。由于其易学易用的特性,Python已成为最流行的编程语言之一。然而,与其他编程语言一样,Python在处理数据时也会遇到各种类型错误。这些错误可能会导致程序执行失败,如果无法及时识别和解决,将会浪费开发者的宝贵时间和资源。本文将介绍解决Python数据类型错误的方法。1.数据类型

如何解决Win11壁纸屏幕冲突?近期有用户在给电脑安装了一些壁纸软件之后会出现黑屏的情况,这很有可能是壁纸屏幕冲突引起的,那么对于这一情况应该如何解决呢?下面我们来看看win11系统壁纸屏幕冲突问题处理方案吧。win11系统壁纸屏幕冲突问题处理方案 1、在桌面的设置选项中打开窗口。 2、鼠标点击文件菜单下的运行新任务按钮。 3、在新建任务弹框中输入explorer.exe字眼,点击确定保存并重启资源管理器即可。

热键冲突怎么解决随着计算机技术的进步,我们在使用电脑时经常会遇到热键冲突的问题。热键是指通过键盘上的组合键或单独的功能键来实现某一操作或功能。然而,由于不同软件和系统对热键的定义各不相同,就导致了热键冲突的问题。当我们按下某个热键时,可能会触发出意料之外的功能,或者根本没有任何反应。为了解决这个问题,下面我将给大家介绍几种常见的热键冲突解决方法。第一种解决方

在MySQL中进行数据转换和转移是一个常见的任务。这种任务有很多种不同的方法,其中最常见的方法是使用SQL语句。本文将介绍如何使用SQL语句在MySQL中进行数据转换和转移,并提供具体的代码示例。一、数据转换数据转换是将一个或多个数据类型转换为另一个数据类型的过程。在MySQL中,可以使用CAST和CONVERT函数来实现数据类型转换。CAST函数CAST函

Python实现XML数据转换为HTML格式在网络开发和数据处理的过程中,XML(可扩展标记语言)是一种常见的数据传输和存储格式。而HTML(超文本标记语言)则是用于显示和布局网页的标准格式。在某些情况下,我们需要将XML数据转换为HTML格式,以便在网页上直接展示。本文将介绍如何使用Python实现这个转换过程。首先,我们需要了解一些基本的XML和HTML

pack()函数将数据打包到二进制字符串中。语法pack(format,args)参数格式-要使用的格式。以下是可能的值-a-NUL填充字符串A-空格填充字符串h-十六进制字符串,低半字节在前H-十六进制字符串,高半字节在前c-带符号字符C-无符号字符s-带符号短字符(始终为16位,机器字节顺序)S-无符号短整型(始终为16位,机器字节顺序)n-无符号短整型(始终为16位,大端字节顺序)v-无符号短整型(始终为16位,小端字节顺序)i-有符号整数(取决于机器的大小和字节顺序)I-无符号整数(取决

有的用户在更新到win11系统后,发现自己的中文输入法变成了x,无法使用。其实这是因为我们处于一个无法使用输入法的位置,只需要进入可以使用输入法的地方就可以解决了。win11输入法已禁用是为什么:答:因为在无法输入的位置。1、一般这种情况都是出现在查看桌面的时候。2、因为大部分时候,我们在桌面上是无法输入文字的。3、所以我们只需要来到可以输入文字的地方就可以解决了。4、例如QQ、微信、文档、记事本、网页等各种能输入的位置都能解决已禁用输入法的问题。


Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

AI Hentai Generator
Generate AI Hentai for free.

Hot Article

Hot Tools

Dreamweaver Mac version
Visual web development tools

Safe Exam Browser
Safe Exam Browser is a secure browser environment for taking online exams securely. This software turns any computer into a secure workstation. It controls access to any utility and prevents students from using unauthorized resources.

Zend Studio 13.0.1
Powerful PHP integrated development environment

SAP NetWeaver Server Adapter for Eclipse
Integrate Eclipse with SAP NetWeaver application server.

SublimeText3 English version
Recommended: Win version, supports code prompts!
