位置: 编程技术 - 正文

数据转换冲突及转换过程中大对象的处理(数据转换常见策略)

编辑:rootadmin

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

推荐整理分享数据转换冲突及转换过程中大对象的处理(数据转换常见策略),希望有所帮助,仅作参考,欢迎阅读内容。

数据转换冲突及转换过程中大对象的处理(数据转换常见策略)

文章相关热门搜索词:数据转换错误有哪些,数据互换,数据转换冲突及解决方案,数据互换,数据转换常见策略,数据转换冲突及解决方案,数据转换冲突及解决方案,数据转换冲突及解决方案,内容如对您有帮助,希望把文章链接给更多的朋友!

SQLServer 数据库开发顶级技巧 确保代码中的数据类型与数据库中的列类型保持一致确保您的应用程序各层数据类型保持一致是非常重要的。例如,如果一列的数据类型为NVARCHAR()

远程连接SQLSERVER 服务器方法 测试条件:一个公网IP,两个静态IP。具体步骤:一、ping服务器IP能否ping通观察远程SQLServer服务器的物理连接是否存在。如果不行,请检查,查看配

SQLserver 企业版 出现"进程发生了严重的异常"错误的处理方法 情景:一直用到比较好,突然不行处理步骤:关了等防火墙;(影响不大,但是有可能是因为杀毒软件处理时把某个关键文件heal了)装了微软补丁http

标签: 数据转换常见策略

本文链接地址:https://www.jiuchutong.com/biancheng/349405.html 转载请保留说明!

上一篇:SQL 提权 常用命令(sqlmap 提权)

下一篇:SQLServer 数据库开发顶级技巧(sqlserver数据库版本号怎么查)

  • 人力资源公司劳务外包
  • 电子税务局能不能抄税
  • 清算时实收资本怎么计算
  • 分公司可以用总公司的业绩吗
  • 车间加班视频
  • 一人有限公司年度审计报告
  • 外经证预交几个点
  • 存货周转率 高
  • 支付拆迁补偿款
  • 持有营业执照
  • 注册资本印花税计入哪个科目
  • 固定资产赔偿制度
  • 制造型企业采购
  • 中意装饰工程有限公司怎么样
  • 占用土地行为不征收耕地占用税有哪些?
  • 财务软件中摊销怎么做账
  • 一般公司报销一个月报销几次
  • 盈亏平衡点定价法例题及答案
  • 仓库间的调拨流程
  • 增值税申报错误怎么处理
  • 有哪些凭证
  • 工程预收款账务处理
  • 金税盘发票显示不出确认
  • 财政专项资金不征税收入
  • 客户分批付款怎么说
  • 委外加工的加工费的会计处理
  • 出纳日记账填写样本
  • php经典教程
  • php的核心
  • typecho 插件开发
  • 长期股权投资转让需要交什么税
  • Win10 (21H1)Build 19043.1266更新补丁KB5005611正式版发布:附修复更新内容
  • php数组函数题目
  • 套期工具的会计分录
  • 鱼香肉丝的做法的教程
  • vue页面路由传参
  • 一般纳税企业增值税计算
  • php的json_encode
  • 怎么计提企业所得税
  • CodeIgniter连贯操作的底层原理分析
  • 蓝桥杯大赛官网试题
  • vue懒加载机构树刷新
  • 猿猴的作文
  • win10自带的重装能彻底清除上网记录和u盘记录吗
  • 无形资产评估增值可以入账吗
  • 出差补贴要扣税吗
  • 进项税额转出最后怎么处理
  • 年初结转增值税怎么算
  • 新会计准则里的机械作业是什么
  • sql server 2005 win10
  • 小型企业需要给员工买社保吗
  • 暂估成本账务处理
  • 小微企业应纳税所得额100万到300万怎么计算
  • 印花税的计算公式与计算注意事项
  • 支付的物业费如何做账
  • 银行存款利息如何计算
  • 收到外国人的礼物怎么感谢
  • 主营业务成本暂估怎么算
  • 生产型企业电费会计分录
  • 资本增值率计算公式是什么?
  • 使用Mysql5.x以上版本出现报错#1929 Incorrect datetime value: '''' for column ''createtime''的快速解决方法
  • 电脑主机windows 7
  • 无法安装osx
  • windows错误1058
  • linux中病毒了怎么处理
  • perl读取文件内容到数组
  • dos命令中的cd命令
  • 特牛的群名
  • Python读取Excel文件需要什么
  • jquery select2的使用心得(推荐)
  • shell循环遍历目录
  • node js模块
  • nodejs body-parser 解析post数据实例
  • unity2020怎么导入资源
  • 基于Android的游戏陪玩APP设计
  • 最新设立税务师事务条件
  • 企业环境信用等级在哪里查询
  • 豫事办登录时密码叫重置什么原因
  • 基本账号信息
  • 国家税务总局每家公司都可以注册吗
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设