(计算机应用技术专业论文)基于java的数据库访问引擎的研究与实现.pdf_第1页
(计算机应用技术专业论文)基于java的数据库访问引擎的研究与实现.pdf_第2页
(计算机应用技术专业论文)基于java的数据库访问引擎的研究与实现.pdf_第3页
(计算机应用技术专业论文)基于java的数据库访问引擎的研究与实现.pdf_第4页
(计算机应用技术专业论文)基于java的数据库访问引擎的研究与实现.pdf_第5页
已阅读5页,还剩67页未读 继续免费阅读

(计算机应用技术专业论文)基于java的数据库访问引擎的研究与实现.pdf.pdf 免费下载

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

摘要 j a v a 语言提供了多种数据库访问技术,但现有的数据库访问与 j a v a 对象映射都是采用代码映射这种映射关系意味着如果数据库表 改变,就需要改变代码,不便于修改和升级。 本论文重点研究j a v a 数据库访问的一些关健技术,对当前已有 的j a v a 的数据库访问技术进行了深入地探讨,详细阐述了各种数据 访问技术的优点、缺陷、适应性及性能,介绍了在此基础上设计开发 并实现了基于j a v a 语言的数据库访问引擎( d a t a b a s e a c c e s s e n g i n e , 简称d a e ) 论文详细描述了d a e 系统的功能、结构、原理及代码 的实现,并以多个实例进行验证,通过对比传统的访问模式,体现了 所提方法的优越性 基于j a v a 语言的数据库访问引擎d a e 使用对象关系映射技术, 即使用x m l 来描述数据库对象模型,通过描述数据库的x m l 与表 形成动态映射,曲运行对( r u n t i m e ) 豹j a v a 对象去实现映射功能; 实现了数据库模型与代码分开,数据库发生了变化,只需要修改相应 的数据库模型描述就可以,克服了数据库访问与j a v a 直接代码映射 的弊病。在操作数据库方面,采用了面向对象的操作方法,s q l 语句 采用面向对象的方法去组装,伺时也保留了s q l 舶操作接口,程序 员不需要去熟悉新的工具,整个系统得以实现轻量化。 关键词:数据库访问引擎( d a e ) ,可扩展标志语言( x m l ) ,对象关 系映射 a b s t ra c t j a v ah a v em a n yk i n d so fd a t aa c c e s s i n gt e c h n o l o g i e s ,b u td a t a a c c e s s i n gt e c h n o l o g i e sa n dc o d em a p p i n gi sa d o p t e di na l lt h ee x i s t i n g m a p p i n g sb e t w c c nd a t ab a s ea c c e s s i n ga n dj a v ao b j e c t t h i sm a p p i n g m 跚塔t h a ti ft h ed a t a b a s ef o r mc h a n g e d , t h eo d d ea l s on e e d 扔k c h a n g e d , w h i c hi si n c o n v 饥i e n tf o rm o d i f y i n ga n du p g r a d i n g t h i sp a p e rm a i n l yw o r k so v e rt h ep r o b l e m si nj a v ad a t a b a s e a c c e s s i n g , p r o b e si n t ot h ee x i s t i n gt e c h n o l o g i e s ,p a r t i c u l a r l ye x p o u n d s t h e a d v a n t a g e s , l i s a d v a n t a g e s , a d a p t a b i l i t i e s a n dc a p a b i l i t i e so fe a c h t e c h n o l o g y , i n t r o d u c e sd a t a b a s e 硼:c e s s m ge n g i n e ( d a e ) w h i c hd e v e l o p e d f r o mt h ef o r m e rt e c h n o l o g i e sb a s e d0 1 1 1j a v a t h ep a p e rd e s c r i b e st h e f l l l 枷o t l ,s t n a m j r e , p r i n c i p l ea n dc o d er e a l i z a t i o no fd a ei nd e t a i l t h e a d v a n t a g e so ft h i ss y s t e ma r ce m b o d i e dt h r o u g hv a d i d a t i n go fs e v e r a l e x a m p l e sa n dc o n t r a s t i n gw i t ht h et r a d i t i o n a lo n e s d a eb a s e do nj a v au s e so b j e c t r e l a t i o nm a p p i n g , e c h n o l o g y , n a m e l y 蝴x m lt od e s c r i b ed a t a b a s eo b j e c tm o d e 。a n dd y n a m i c m a p p i n gi ss h a p e dt h r o u g hx m l a n df o r m m a p p i n gi sr e a l i z e db yt h e f u n c t i o n i n gj a v a t nt h i sw a y , t h ed a t a b a s em o d e li ss e p a r a t e df r o mt h e c i d d e ,s oe v e nt h ed a t a b a s ec h a n g e s ,w eo n l yh a v et om o d i f yt h ed a t a b a s e m o d e ld e s c r i p f i o n m e a n w h i l e t h ed i s a d v a n t d g e si n m a p p i n gb e t w e e n d a t a b a s ea c c e s s i n ga n dj a v ad i r e c tc o d ew i l lb eo v e r c o m e i nt e r m so f o p e r a t i n gd a b b l e ,o b j e c t - f a c e dt e c h n i q u ei su s e d s q li sg r o u p e di n o b j e c t - f a c e dw a y , a n di t so p e r a t i n gi n t e r f a c ei sr e s e n r e d t h ew o r ki s l i g h t e n e dw i t h o u th a v i n gt oh ef a m i l i a rw i t ht h en e wt o o l s k e yw o r d s :d a t a b a s ea c c e s s i n ge n g i n e ( d a e ) ,e x t e n s i b l em a r k e d l a n g u a g e ( x m l ) ,o rm a p p i n g i i i 原创性声明 本人声明,所呈交的学位论文是本人在导师指导下进行的研究工 作及取得的研究成果尽我所知,除了论文中特别加以标注和致谢的 地方外,论文中不包含其他入已经发表或撰写过的研究成果,也不包 含为中南大学或其他单位的学位或证书而使用过的材料。与我共同工 作过的同志对本研究所作的贡献均已在论文中作了明确的说明。 关于学位论文实用的授权说明 本人了解中南大学有关保留、使用学位论文的规定,即:学校有 权保留学位论文,允许学位论文被查阅和借阅;学校可以公布学位论 文的全部或部分内容,可以采用复印、缩印或其他手段保存学位论文; 学校可以根据国家或有关部门规定送交学位论文。 作者签名;殛照导师签名:2 鲨:日期:,苎望年主月均 硕士学位论文第一章绪论 t 1研究背景 第一章绪论 数据是任何计算机应用程序最重要的方面。计算机应用程序的核心是使某人 或另一个计算机系统能够访问其数据。在企业环境中,数据不仅必须是可访问的 ( 即,与用户界面连接并按一系列业务规则管理) ,而且还必须是持久的u 】。 自从2 0 世纪6 0 年代面向对象技术出现,数十年来该技术在广度和深度上不 断发展、成熟,逐渐成为被广泛采用的行业标准,面向对象的应用程序开发目前 己经是信息技术的主流。几乎所有的应用程序都需要在一个持久化的存储系统 ( 如关系数据库或面向对象的数据库) 中存放和取回信息,而对面向对象的应用程 序而言这项持久数据存储工作就围绕着持久化对象展开。持久化对象就是需要被 存储在持久化存储系统中的对象。对对象的持久化存储系统,有多种数据库可以 选择,但是由于关系数据库的理论非常完善。并且得到了数十年的实践考验,不 论从性能还是数据完备性的角度,目前关系数据库都有着无可比拟的优势。顼以 现阶段开发软件系统时在使用面向对象技术的同时常常不得不使用关系型数据 库进行持久数据存储。 面向对象的软件使用关系数据库作为其存储机制意味着数据在对象模型和 关系模型间的转换。对象模型基于软件工程的一些原理,而关系数据模型则基于 数学原理,两种模型理论基础的不同导致了它们之间的“阻抗不匹配”1 1 】。由于 对象模型和关系模型问的“阻抗不匹配”,使用关系数据库存储持久化对象时需 要进行。对象,关系映射”t n 对象,关系映射的实现就是按已制定好的映射方案将对象持久化的过程,为 了提供透明的对象持久化,需要设计一个位于业务逻辑层和关系数据库之问的持 久层来完成对象和数据库问的转换。业务逻辑层通过一些接口调用持久层就可以 完成对象持久化,而不需要去直接处理低级的a p i ,实际的持久化工作交给持久 层就可以了啊 1 2 研究现状 对于持久性的需求是任何企业应用程序的先决条件,在使用j a v a 语言编写应 用程序时也是一样的j a v a 语言提供了方便访问数据的技术,即开发持久层的技 术对于有些模式开发持久层时,如果该项目在开发中期需求发生变化,导致原 来的数据库表要增加一些字段,或者要增加一个新表,那么原来编写的代码就要 硕士学位论文第章绪论 重新改写,如果需求变动过大,那么几乎该项目就需要从头干起 3 1 。这样就大大 增加了开发的难度,使得程序员每天都在改自己写过的程序,开发效率很低。 同时有的开发的模式是避免这种情况的发生,但提供的一套基于对象的查询 语句,而不是标准的s q l 语句,这让程序员需要学习新的工具,并且是不成熟 的工具,同时也增加了系统的复杂度,与轻量级的目标背道而驰。为了解决上面 的两个问题,并提高开发效率和可靠性,所以本文在此基础上开发基于j a v a 平 台的数据库访问引擎( d a t e b a s e a c c e s se n g i n e ,简称d a e ) 来实现持久化。 1 3本课题的实现目标 为了方便在系统开发过程中大量的数据库应用编程,避免以往数据库内容改 变,就必须改变代码的麻烦,以及更好的提高系统的开发效率,为此,开发一套 科学、高效、且容易学习掌握的基于j a v a 的数据库访问引擎( d a e ) 工具。d a e 的目标就是要解决以下两个问题: 在j a v a 对象与数据库表之间的映射问题上,使用对象,关系映射技术( o r m a p p i n g ) ,即使用x m l 来描述数据库对象模型,通过描述数据库的x m l 与表 形成动态映射,由运行时( r u n t i m e ) 的j a v a 对象去实现映射功能;实现了数据 库模型与代码分开,数据库发生了变化,只需要修改相应的数据库模型描述就可 以。 在操作数据库方面,采用了面向对象的操作方法,s q l 语句采用面向对象 的方法去组装,同时也保留了s q l 的操作接口,程序员不需要去熟悉新的工具, 整个系统得以实现轻量化。d a e 的优点体现在如下四个方面: ( 1 ) 开发简单、开发效率高。 ( 2 ) 开发人员无需学习j d b c 和s q l ,只要懂得d a e 几个简单的a p i ,就可 以实现对数据库的全部操作。 ( 3 ) d a ea p i 封装繁杂的数据库操作,开发人员无须再面对这些;让开发变 得简单,效率更高,同时减少了出错,提高了程序的健壮性。 ( 4 ) r d o ( r e c o r dd a t ao b j e c t ) 通过引擎+ 规则生成;r d o 通过规则与表形成 动态映射;实现了数据库模型与代码分开,数据库发生了变化,只需要修改相应 的数据库模型描述就可以;e j b 中是j a v a 代码与表映射,是静态映射,当数据 库发生变化时,要修改相应e j b 的代码,而在d a e 中不需要修改代码,只需要 修改相应描述规则。 1 4技术背景 2 硬士学位论文第一章绪论 要使基于j a v a 的数据库访问引擎的系统得以实现,涉及到一些语言的知识 和相关的工具及技术,在详细讨论具体实现之前,有必要先介绍一下这些相关知 识,以便为理解和完成设计做必要的知识准备。由于本研究是基于j a v a 的数据 库访问技术,所以对j a v a 和数据库的相关知识介绍是必不可少的;并且本研究 旨在使用旺l 来描述数据库对象模型,通过描述数据库的v i l 与表形成动态 映射,幽运行时( r u n t i m e ) 的j a v a 对象去实现映射功能;实现了数据库模型与 代码分开,数据库发生了变化,只需要修改相应的数据库模型描述就可以。所以 对对象关系映射技术和订l 必须有一个清晰的认识。下面主要对这凡个方面的 技术进行介绍t ( i ) 对象,关系映射技术 ( 2 ) x m l 技术 ( 3 ) j 越,a 概述 “) 数据库理论概要 t 4 1 对象关系映射技术 面向对象模型基于软件工程的一些原理,比如信息封装等由于对象既能表 示状态又能体现行为,面向对象模型有利于构造整个应用系统;而关系模型则基 于数学原理,特别是集合论。关系模型比面向对象模型更加贴近数据的存储实现 面向对象模型和关系模型不同的理论基础导致了它们之间存在固有的“失配”现 象如果应用系统中数据按照面向对象模型建模,再存储到关系数据库中,则在 应用程序中对数据的操作将包括两部分:一部分使用对象以实现应用逻辑;另一 部分操作关系和元组以实现数据的存储和读取,这种交叉使用面向对象模型和关 系模型的方式显然不利于应用系统的设计和实现【4 1 对象,关系映射在很大程度上缓解了应用系统中面向对象模型和关系模型使 用中的。失配” s s l 。在使用对象关系映射的应用系统中,通常使用面向对象模 型实现应用逻辑,而对象的存储和读取完全由实现对象,关系映射的模块完成。 实现对象,关系映射的模块模拟面向对象数据库提供的功能【刀,在关系数据库中操 作关系和元组,实现对象的存储和读取。 由于面向对象的模型和关系数据模型的“阻抗不匹配”,当应用系统中的对 象需要存储在关系数据库中时,需要进行对象关系的映射【5 3 】对象关系的映射 ( o b j e c t r e l a t i o nm a p p i n g ) 是指这样的一种操作:它试图将对象的状态映射到 关系数据库的数据上,以便提供透明的持久性【”,如图1 1 所示 对象,关系映射解决方案一般把每个对象映射到数据库表的单个行上,这一 行通常来自一个表,但有时由一个表的连接操作产生i ”l 。对象关系映射的重要 作用是它消除了开发人员编写低级数据访问代码的需要,这在某些应用中能够极 硕士学位论文第一章绪论 大地提高工作效率,从而保证应用代码专心地处理对象,以及能够导致创建一个 可以支持多个用例的域对象模型f 7 1 。 对象:类 表 属性i类型1 字段1类型1 属性2类型2 q 躺系映 字段2类型2 属性3类型3 字段3类型3 图卜i 对象关系映射 1 4 2x m l 技术 1 沮。的产生与发展 v i l 是一种扩展的标记语言,它具有很好的扩展性标记。通过沮。实现 不同数据库的定义,实现对m 。数据库的访问和异构数据库之间的互访翻。 m ,( e x t e n s i b l em a r k u pl a n g u a g e ) 是由万维网协会( w 3 c ) 设计,特别 为w e b 应用服务的s g m l ( s t a n d a r dg e n e r a lm a r k u pl a n g u a g e ) 的一个重要分 支【4 】。总的来说,x m l 是一种中介标示语言( m e t a - m a r k u pl a n g u a g e ) ,可提供 描述结构化资料的格式,详细来说,x m l 是一种类似于h t m l ,被设计用来描 述数据的语言。x m l 提供了一种独立的运行程序的方法来共享数据,它是用来 自动描述信息的一种新的标准语言,它能使计算机通信把i n t e m e t 的功能由信 息传递扩大到人类其他多种多样的活动中去。x m l 由若干规则组成,这些规则 可用于创建标记语言,并能用一种被称作分析程序的简明程序处理所有新创建的 标记语言,正如h t m l 为第一个计算机用户阅读i n t e r n e t 文档提供一种显示方 式一样,札也创建了一种任何人都能读出和写入的世界语。x m l 解决了 h t m l 不能解决的两个w e b 问题,即i n t e r n e t 发展速度快而接入速度慢的问 题,以及可利用的信息多,但难以找到自己需要的那部分信息的问题。x m l 能 增加结构和语义信息,可使计算机和服务器即时处理多种形式的信息。因此,运 用x m l 的扩展功能不仅能从w e b 服务器下载大量的信息,还能大大减少网络 业务量【2 】。 x m l 中的标志( t a g ) 是没有预先定义的,使用者必须要自定义需要的标 志,x i v i l 是能够进行自解释( s e l f d e s c r i b i n g ) 的语言。x m l 使用d t d ( d o c u m e n t t y p e d e f i n i t i o n 文档类型定义) 来显示这些数据, x s l ( e x t e n s i b l es t y l e s h e e t l a n g u a g e ) 是一种来描述这些文档如何显示的机制, 它是x m l 的样式表描述语言【1 9 1 。x s l 的历史比h t m l 用的c s s ( 层叠式样 4 硕士学位论文第一章绪论 式表c a s c a d i n gs t y l e s h e e t s ) 还要悠久,x s l 包括两部分:一个用来转换x m l 文档的方法:一个用来格式化帆文档的方法。x l l ( e x t e n s i b l el i n k l a n g u a g c ) 是x m l 连接语言,它提供x m l 中的连接,与h t m l 中的类似。 但功能更强大。使用工,可以多方向连接,且连接可以存在于对象层级,而 不仅仅是页面层级。由于x m l 能够标记更多的信息,所以它就能使用户很轻 松地找到他们需要的信息利用x m l ,w e b 设计人员不仅能创建文字和图形, 而且还能构建文档类型定义的多层次、相互依存的系统、数据树、元数据、超链 接结构和样式表h 7 1 1 ) x m l 舫主要特点 ( 1 ) 规范简单x m l 经过精心设计,整个规范简单明了,它曲若干规则组 成,这些规则可用于刨建标记语言,并能用一种常常称作分析程序的简明程序处 理所有新创建的标记语言沮。能创建一种任何人都能读出和写入的世界语。 这种创建世界语的功能叫做统一性功能。如x m l 创建的标记总是成对出现 以及依靠称作统卅:码的新的编码标准 ( 2 ) 标准开放x m l 是s g m l 在市场上有许多成熟的软件可用来帮助编 写、管理等,开放式标准x m l 的基础是经过验证的标准技术,并针对网络傲 最佳化众多业界顶尖公司,与w 3 c 的工作群组并肩合作,协助确保交互作 业性,支持各式系统和测览器上韵开发人员、作者和使用者,以及改进x m l 标 准血懈释器可以使用编程的方法来载入一个x m l 的文档,当这个文档被 载入以后用户就可以通过) m 几文件对象模型来获取和操纵整个文档的信息, 加快了网络运行速度1 2 1 3 ,扩充且高效支持复用文档片断,使用者可以发明和使用自己的标签, 也可与他人共享可延伸性大,在x m l 中,可以定义无限量的一组标注x m l 提供了一个标示结构化资料的架构。一个x m l 组件可以宣告与其相关的资料 为零售价、营业税、书名、数量或其它任何数据元素。随着世界范围内的许多机 构逐渐采用x m l 标准。将会有更多的相关功能出现:一旦锁定资料,便可以 使用任何方式透过电缆线传递,并在浏览器中呈现,或者转交到其他应用程序做 进一步的处理。帆提供了一个独立的运用程序的方法来共享数据,使用 d t d ,不同的组中的人就能够使用共同的d t d 来交换数据。你的应用程序可 以使用这个标准的d t d 来验证你接受到的数据是否有效,你也可以使用一个 d t d 来验证你自己的数据嘲 “) 国际化。标准国际化,且支持世界上大多数文字。这源于依靠它的统一 代码的新的编码标准,这种编码标准支持世界上所有以主要语言编写的混合文 本。在h t m l 中,就大多数字处理而言,一个文档一般是用一种特殊语言写成 硕士学位论文 第一章绪论 的,不管是英语,还是日语或阿拉伯语,如果用户的软件不能阅读特殊语言的字 符,那么他就不能使用该文档。但是能阅读x m l 语言的软件就能顺利处理这 些不同语言字符的任意组合。因此,x m l 不仅能在不同的计算机系统之间交换 信息,而且能跨国界和超越不同文化疆界交换信剧1 9 】 1 4 3j a v a 的概述 j a v a i 吾言是s u n m i c r o s y s t e m s 公司于1 9 9 5 年正式命名并推出的一种面向对象 的编程语言。它的语言简洁、集多种程序设计语言之大成,且面向对象、不依赖 于机器的结构、具有可移植性、分布性、安全性、并且提供了并发的机制、高性 能、多线程以及动态性。j a v a i 吾言的特性使它可以最大限度地利用网络,j a v a 的小应用程序( a p p l e t ) 可在网络上传输而不受c p u 和环境的限制。另外,j a v a 还 提供了丰富的类库,使程序设计者可以很方便地建立自己的系统 9 1 。 , j a v a 语言提供了方便访问数据库的技术。应用j a v a 技术实现数据库应用系 统是未来发展方向,j a v a 的数据库应用现己成功地应用于商业、政府及大学等领 域,应用才刚刚起步。相信不久的将来,j a v a 技术将更加完善成熟。j a v a 的数 据库应用也将遍地开花。因此j a v a 程序对数据库的访问与操作成为其很重要的 功能n 町。 1 4 4 数据库概述 随着全球信息化浪潮的到来,人类社会正在从工业化社会迈向信息化社会。 信息已经成为经济发展的战略资源,信息技术己成为社会生产力中重要的组成部 分。迄今为止,数据库仍是数据管理最有效的方法。数据库已是信息化社会中信 息资源管理与开发利用的基础。对于一个国家,数据库的建设规模、使用水平已 成为衡量该国信息化程序的重要标志【l 町。 数据库是长期存储在计算机内的,有组织、可以共享的数据集合。在当今的 信息时代,数据库是无处不在,在许多计算机应用系统中,都要涉及到有关数据 库操作,其中,相当一部分是以数据库为核心来组织整个系纠1 8 1 。 现在,数据库技术己成为计算机领域最重要的技术之一,它是计算机软件学 科的一个独立分支。目前无论是市场的需求还是技术条件的成熟,数据库与面向 对象、因特网、多媒体技术的综合已成定局。数据库技术使得计算机应用迅速渗 透到工业生产、商业、行政、科学研究、工程技术和国防军事的各个部门,渗透 到社会的每一角落,并改变着人们的工作方式和生活方式。 数据库的发展按其数据模型也可分为四个阶段:层次模型数据库、网状模型 数据库、关系模型数据库和面向对象模型数据库。层次数据库和网状数据库在2 0 世纪7 0 年代到8 0 年代初非常流行,在数据库系统产品中占据了主导地位,现在已 基本上被关系数据库系统取代【1 4 】。 6 硬士学位论文 第一章绪论 而s q l ( s t r u c t u r e dq u e r yl a n g u a g e ,译为结构化查询语言) 在关系型数据库 中的地位又是非常重要,就犹如英语在世界上的地位。它是数据库系统的通用语 言,利用它,用户可以用几乎同样的语句在不同的数据库系统上执行同样的操作。 比如“s e l e c t 右0 m 数据表名”代表要从某个数据表中取出全部数据,在o r a c l e9 i 、 s q l s e r v e r 2 0 0 0 、f o x p r o 等关系型数据库中都可以使用这条语句。s q l 已经被 a n s i ( 美国国家标准化组织) 确定为数据库系统的工业标准 s q l i 吾言按照功能可以分为4 大类。 ( 1 ) 数据查询语言i x ) l :查询数据。 ( 2 ) 数据定义语言d d l :建立、删除和修改数据对象。 ( 3 ) 数据操纵语言d m l 完成数据操作的命令,包括查询 ( 4 ) 数据控制语言d c l :控制对数据库的访问,服务器的关闭,启动等。 s q l 的主要特点: s q l 语言简单易学、风格统一,利用简单的几个英语单词的组合就可以完成 所有的功能。在s q l p i u sw o r k s h c e t 环境下可以单独使用的s q l 语句,几乎可以不 加修改地嵌入到如v b 、p b 这样的前端开发平台上。利用前端工具韵计算能力和 s q l 的数据库操纵能力。可以快速建立数据库应用程序l l i j 。 1 5论文的内容安排 本文共分为四章; 第一章为绪论,介绍的课题的研究背景和现状,以及研究目的和意义以及开 发此工具的技术背景。 第二章讲述了j a v a 目前已有的几种数据访问技术,并综合分析了各种技术 的优缺点、适用性及性能等。 第三章讲述了数据库访问引擎( d a e ) 的设计,这是本文的重点,包括d a e 韵简介、结构、甄理以及核心类的介绍 第四章即是d a e 的具体实现,详细介绍程序底层的实现细节,并且举几个 例子进行扼要的描述过程,最后进行了性能测试。 第五章是对整个论文的总结和展望。 7 硕士学位论文第二章j a v a 环境下的数据访问 第二章j a v a 环境下的数据访问 数据访问技术是i t 技术中的一个永恒的话题,在j a v a 环境下,数据库访问 技术是五花八门,种类繁多,但它们都有各自的优缺点。 2 1 数据访问实现方法的种类 2 1 1 直接代码嵌入 这是一种比较通常的做法,就是直接在业务逻辑中嵌入s q l 语句,实现对 象在关系数据库中的存取。这样的好处是写代码效率很高,对于小型应用程序或 者原型,这样是可行的 2 0 1 。缺点是直接耦合了业务逻辑类与关系数据库结构, 这意味着任何小的改变( 例如对某一列重命名、结构改变或者移植到另外一种数 据库) 都导致源代码级的修改,使代码难以维护和扩展1 6 】。结构见图2 1 所示: 业务类 图2 - t 直接代码嵌入持久化方法 2 1 2 数据类 在存储过程或者单独的数据类中硬编码。在这种方法中,业务类的持久化操 作被封装在一个或者多个数据类中,但是在对数据库进行改动后,仍然需要修改 和重新编译数据类。这种方法也只适合原型或者业务类较少、不会频繁修改的小 型系统。 困 2 1 3 持久层 图2 - 2 数据类持久化方法 8 目届宙目 硬士学位论文第二章j a v a 环境下的数据访阔 也叫关系数据库访阀层,即专注于实现数据持久化应用领域的某个特定系统 的一个逻辑层面,将数据使用者和数据实体相关联。此方法就是建立将对象映射 到某种持久机制( 在这里是关系数据库) 并且对关系数据库结构的简单改动并不 影响你的面向对象代码的一个持久层。这种方法的好处是应用程序开发者不需要 了解关系数据库结构,事实上,开发者甚至不需要知道对象是保存在关系数据库 中这种方法允许组织开发大规模的针对关键业务的应用程序州 2 2 关系模式和面向对象模式的不匹配 各种应用软件的开发都不可避免要面临内存数据的持久化,使各种数据能够 长时问保存并持续使用。就现阶段而言,关系数据库是大多数软件系统数据存储 的首要选择另一方面,面向对象技术是应用于新软件系统开发的最常见的环境。 对象模型基于软件工程的一些原理,而关系数据模型则基于数学原理,特别是集 合论的原理【5 珂两种不同的理论基础导致各自有不同的优缺点。对象模型侧重 予从包含数据和行为的对象中构造应用程序,而关系数据模型则主要针对数据的 存储。对象模型和关系模型之问的这种失配叫做阻抗不匹配【”采用关系数据库 的面向对象的软件项日应用都必定要涉及对象模型与关系数据模型之问的交互, 由于面向对象的模型和关系数据模型的阻抗不匹配,如何解决这种不匹配,这是 在数据访问技术中需要解决的问题,而我们本文介绍的数据库访问引擎使用的对 象关系映射( o rm a p p i n g ) 技术解决了这种不匹配的问题 2 3j a v a 目前的几种数据访问技术 z 3 1j d 睇直接访问数据库 j a v a 中最常用的数据访问方式是j d b c 。j d b c 可以说是访闯持久数据最原 始、最直接的方法z d b c 是s u n 公司提供的,用来执行s q l ( s t m c a l f e d q u e r y l a n g u a g e ) 语句的j a v a 应用程序接1 2 1 。j d b c 定义了j a v a 与数据库之间的接1 2 类 库( j a v as q l 包) 它是j a v a 语言中执行s q l 语句的a p i ,它由一系列类和接口 所组成,这些类和接口均是由j a v a 语言写成的,一个程序开发者可以通过它在 j a v a 语言中建立与数据库的链接,执行s q l 语句和处理s q l 语句返回的结果【2 t j 。 它易于向任何关系数据库发送s q l 语句,支持对多种数据库的访问。运用j d b c a p i ,只需写出单独一个程序就能够发送j d b ca p l 给相应的数据库,如s y b a s e , o r a c l e 或i n f o r m i x 等j a v a 语言的中性结构和j d b c 的开放性使得程序员只需写 一次程序就能让它到处运行嗍 在实现o rm a p p i n g 和数据持久性时。j d b c 有下列优点: 9 硕士学位论文第二章j a v a 环境下的数据访问 ( 1 ) 技术成熟 j d b c 是j a v a 的核心a p i ,属于非常成熟的技术,它从出现到现在已经有七 年左右的时间。j d b c 的可靠性和最佳实践对于j a v a 持久性机制的开发来说是一 笔非常宝贵的资产【6 j 。 ( 2 ) 标准化 j d b c 通过把特定关系数据库厂商专用的细节抽象出来而实现了大多数常用 数据库访问功能的标准化。 ( 3 ) 可移植性高 只要稍加注意保证数据库访问代码遵守最普通的数据库功能,应用程序就可 以通过简单地转换j d b c 驱动程序而用于不同的关系数据库产品上。使得程序员 只需写一次程序就能让它到处运行1 2 2 1 。 “) 成本低 j d b c a p i 由s u n 公司免费提供,可以说无需成本。 ( 5 ) 数据访问速度高 直接使用j d b c 访问关系数据库是j a v a 环境中最快速、直接的数据访问方 法。 ( 6 ) 资源使用少 相对于其它技术,j d b c 的资源占用最少。使用j d b c 访问数据库时最主要 的资源消耗在于生成和维护资源占用比较大的代表与数据库连接的c u n n e e t i u n 对象。对于这点可以建立一个数据库连接缓冲池在多个数据库访问间共享一组连 接,而不是在它们需要的时候都为它们生成。这样就可以改善资源使用,同时也 有助于提高应用程序的响应能力 6 1 。 j d b c 的缺点 使用j d b c 操作数据库,一般基本都是如下几个步骤: ( 1 ) 建立数据库连接,获得c o n n e c t i o n 对象。 ( 2 ) 根据用户的输入组装查询s q l 语句。 ( 3 ) 根据s q l 语句建立s t a t e m e n t 对象或者p r e p a r e d s t a t e m e n t 对象。 ( 4 ) 用c o n n e c t i o n 对象执行s q l 语句,获得结果集r e s u l t s e t 对象。 ( 5 ) 然后一条一条读取结果集r e s u l t s e t 对象中的数据。 ( 6 ) 根据读取到的数据,按特定的业务逻辑进行计算。 ( 7 ) 根据计算得到的结果再组装更新s q l 语句。 ( 8 ) 再使用c o n n e c t i o n 对象执行更新s q l 语句,以更新数据库中的数据。 ( 9 ) 最后依次关闭各个s t a t e m e n t 对象和c o n n e c t i o n 对象。 由上可看出代码逻辑非常复杂,这还不包括某条语句执行失败的处理逻辑。 l o 硕士学位论文第二章j a v a 环境下的数据访同 其中的业务处理逻辑和数据存取逻辑完全混杂在一块。而一个完整的系统要包含 成千上万个这样重复的而又混杂的处理过程,假如要对其中某些业务逻辑或者一 些相关联的业务流程做修改,要改动的代码量将不可想象。另一方面,假如要换 数据库产品或者运行环境也可能是个不可能完成的任务。而用户的运行环境和要 求却千差万剐,我们不可能为每一个用户每一种运行环境设计一套一样的系统 鳓。 所以我们在提到j d b c 实现对象关系映射和数据持久性时的优点的同时,应 注意到它还有下列缺点 ( 1 ) 牺牲了类型安全; ( 2 ) 不是基于面向对象的设计思想; ( 3 ) 异常处理的闷题。所有的数据集的g c t 方法都是从r e s u l t s e t j j :1 :3 继承的这 就意味着所有的异常都是j a v 乱s q l s q l e x c e p t i o n ,客户端被迫捕获这些异常; “) 数据库表名、列名和结构也就必须嵌入在客户端的代码一旦数据结构改 变,客户端的代码整个也就需要随之改变; ( 5 ) 0 1 层应该只负责数据表示功能,如果采用了这样的访问方式。u l 层还必 须负责数据访闯功能,违反了当初中间层出现的初衷;底层细节的抽象# ( 6 ) r o w s c t 接口中的许多方法都是与客户端无关的踟i 忉设计和实现复杂 正是由于j d b c 并不是面向对象的数据库访伺方法,所以如果使用_ ,d :来设 计和实现对象关系映射是非常复杂的。j d b c 要求你明确地处理数据字段,并且 将它们映射到关系数据库的表中。开发人员被迫与两种区别非常大的数据模型、 语言和数据访闯手段打交道:j a v a ,以及s q l 中的关系数据模型。在开发中实现 从关系数据模型到j a v a x t j - 象模型的映射是如此的复杂,即使是简单的对象关系映 射编写j d b c 代码都会有很大的工作量,更不用说复杂的对象,关系映射。当应用 系统有大量的写和更新操作时需要复杂韵事务管理,虽然j d b c 有足够的能力可 以实现,但是实现起来也将是极其复杂的。有文献称用j d b c 手工编写实现对象, 关系映射持久层会占整个软件项 | 3 0 - 4 0 的开发时间【1 3 1 。 多年来j d b c 一直是j a v a 开发人员进行数据访问的标准。它是一种牢固的且 已证实的技术,允许架构设计师和开发人员利用现有关系数据库基础结构和现有 的专门技术来访问数据库。随着时间的流逝,它已经发展成可以提供完全具有高 速缓存和资源池机制的完善的数据库驱动程序,很显然这使开发人员得益颇多 但如果用来实现对象,关系映射,j d b c 有着致命的缺点,即设计和实现过于复杂, 开发工作量巨大、易出错且会降低应用程序性能【2 l l 。所以在实现对象,关系映射 时,对于简单的应用可以选择j d b c 。但对于有一定复杂度的应用就不应该考虑 硕士学位论文 第二章j a v a 环境下的数据访问 这项技术了。 2 3 2d d 0 j a v ad a t ao b j e c t s ( j d oj a v a 数据对象) 是在j a v ac o m m u n i t yp r o c e s s 领导之 下开发的一个存储对象新规范( j d o1 0 版于2 0 0 2 年3 月发布) ,规范的两个主要目 的是提供数据处理和访问机制的a p i 以及允许规范的实现作为应用服务器的一 部分1 9 。 j d o 中独到的核心思想是在尽可能不增加程序员额外工作的情况下提供一 个面向j a v a 的数据库存储机制。程序员不需要学习s q l ,也不需要很麻烦地通过 j d b c 调用将数据从j a v a 对象中复制到数据库或从中读出,他们只需要按自然的 想法使用j a v a 类、属性和对象之间的引用,而不用写与之无关的大量代码,那些 代码会使人头晕脑胀。甚至对于查询来说,程序员也可以用j a v a 的布尔表达式( 即 判断比较表达式) 来代替s q l 。换句话说,程序员只用写j a v a 代码,而存储都是 自动实现的【6 l 。 在实现对象关系映射和数据持久性时,j d o 提供了一些独特的优点: ( 1 ) 面向对象 j d o 提供了面向对象的数据库存储机制。一个具有一定规模的应用程序可以 完全独立地j d o 来编写,采用传统的j a v a 建模、语法和编程技巧。使用j d o ,可 以基于j a v a 的对象模型来定义应用程序中要保存的信息。当采用类扩展或查询到 访问数据库中的实例的时候,代码看上去与其它的访问内存中的实例的j a v a 程序 没什么区别。使用j d o ,不需要学习其它的数据模型或类似s q l 的访问语言,不 需要给出从内存中的对象到数据库中的镜像数据之间的映射方法,可以充分地利 用j a v a 中的面向对象的特性而不受太多限制,这包括使用继承和多态,而这些在 j d b c 或e j b 体系中是不可能的【6 】。 ( 2 ) 透明的持久性 简单、平常的j a v a x 对象可以用一种透明的方式保存到数据库或在数据库中访 问。j d o 用于对象关系映射时会自动生成j d b c 调用来自动地将j a v a 对象和关系 数据库中的数据对应起来1 6 1 。当然与实体b e a n h f l 比,使用j d o 还不能提供完全的 透明的持久性,因为它不能自动保持存在于内存中的对象与数据库中数据的同 步。 ( 3 ) 设计和实现简单 j d o 提供了一个非常容易上手而高效的环境来编写需要保存数据的j a v a 应 用程序。使用j d o ,程序员能完全在面向对象的范例内操作。这通常会使开发更 简洁、更平滑且更不易出错,因为程序员不用在关系的思想体系和面向对象的思 想体系之问频繁地转换。j d o 体系结构向开发人员隐藏了低级别的持久性细节, 硕士学位论文 第二章j a v a 环境下的数据访问 从而使他们专注于从业务过程的角度管理对象,不至于陷入数据持久性逻辑的琐 碎细节中。比起这些其它的竞争技术来,使用j d o 用对象模型和很少量的代码开 发应用程序 ,d o 的缺点 1 ) 有一定成本 在使用j d o 产品时需要为j d o 供应商提供一定的购买费用。 ( 2 ) 新的持久性规范 j d o 考虑到了丰富的面向对象的持久性机制,它充分利用了对象合成( 包含 其它对象的对象) 及继承( 通过完整的类型层次结构来识别对象类型) 。尽管j d o 的面向对象持久性给应用程序开发人员带来了许多便利,但它也使数据库管理员 灰心和困惑跚目前j d 0 不提供结合存储过程的机制,因此d b a 要花大力气学习 如何使用虹声明约束【埘,或如何指导j a v a 开发人员怎样管理数据。j d o 更适合 于新项目、新组件或现有的独立于旧l m b m s 的应用程序,加果要将现存的关系 数据库也使用j d o ,就需要多做一些映射工作( 编辑描述符) 婀 ( 3 ) i d o 描述数据对象是基于j a v a 代码映射,当数据库表结构改变时。需要 重新修改代码j i ) o 使用的查询语言是j d o q l ,程序员必段学习新的工具1 2 3 1 。 2 3 3h i b e m a m 壬i i b e m m e 是- - 种比较彻底的j a v a 对象映射工具,支持所有的使用各种j 绷思 想如i n h e r i t a n c c , a 融i o n , c o m p o s i t i o n , c o l l e c t i o n s 等实现的对象p g 。它可以直接 映射大部分的j a v a b c 釉而不需要对它们作任何修改,即使修改最多也就是在b e a n 里面加上一些私有访问方法四;可以将一个用户定义的多个类的实例映射到一张 表的同一行;还可以利用代理模式来简化载入类的过程闭。这将大大减少利用 h i b e r n a t eq l 从数据库提取数据的代码的编写量,从而节约开发时间和开发成本 每一种持久化机制都有一种对持久化对象属性的访问机制【3 l l 。比如说 s e

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论