快速业务通道

JavaBeans和关系数据库的镜像 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-25
Set中循环取出的数据的 类型(这一方法当然将会包括许多冗余代码)。

然而,以上两种方法都不能真正解 决问题。因为记录和构造函数在程序中的关系仍将是僵硬的。若想得到通用的数据库编码,必须 自动地建立数据库和构造函数二者的关联。

Java的性能对于此时的我们就如 雪中送碳。清单2中的程序片段只需一个类名就可以建造一个Java类。这样,我们就可以凭借类 和表的名称来识别那些可以处理从表中抽取出的记录的构造函数。利用标准的JDBC类,可以容 易地获得所有表的表名,在此,我们将要充分利用这个Java小技巧。只要简单地为每个数据库表 开辟一个Java类,使类名和表名相互匹配,无论何时,每当从表中抽取出一条记录的时候,通过 将表名传递给Class.forName(),程序将自动生成一个对象。

Class c = class.forName("Person");Person p = (Person)c.newInstance();System。out.println("... just created a " + c.getName();

清单2:一个简单的Class.forName()例子

然而,此处还有一些问题。由于对 某些特定的类来说,forName()函数需要调用参数为void的构造函数,所以不能将RecordSet变 量直接传递给构造函数。在这里,我们需要一个初始化函数,把从数据库中抽取出的记录作 为RESULTSET参数,将其值赋予对象的数据元素。一个好的方法是引入超级类,并将其作为所有 数据库表相关类的通用父类。实际上,这个超级类在数据库查询中充当着重要的角色,我们将在 下面展示这一点。

查询数据库

利用上面的方法可以由记录生成 对象,但是你仍然得用SQL语句来查询数据库,这需要对数据库结构有深入的了解。这还是没有 解决问题,虽然我们能够自动地匹配数据库表和类的名字,但是还是必须手工编写SQL语句。这 就是说每次修改数据库结构后,将不得不手工编辑这些查询语句。不过,我们仍然可以利用前文 所述的方法来越过这个障碍。通常而言,查询关系数据库时,你将会用到属于主键或索引的字段 名和值。一言弊之,如果某人向你提供了适当的字段名和字段值,你就可以从相应的数据库中抽 取符合要求的记录(或字段)。而DatabaseMetaData对象不但可以被用于检索一系列的表名(见 上所述),而且可以获得一系列的主键及索引字段。上面的问题由此可以迎刃而解。

通过填入一系列适当的(字段名,字段值)对,可以利用相对而言少得多的代码实现对关系数据库的查询。你可以将对子中的所有字段名和数据库中的主健及索引字段相匹配。每当你找到了名字列表中相应的主健或索引字 段,可以根据相应的数值来生成一个SQL语句,执行它来获取RecordSet,并通过Class.forName()构造机制将结果转化为对象。

实现这一想法要求可以以(名,值)对的方式对与数据库表相关的每个类的数据元素进行存取。但是这种方法只有通过上节所述的通用父类才能趋于完美。清单3和4利用伪码表示了这一方法。

Open the database connectionRetrieve a list of user defined tablesfor each table{Check where there is a corresponding class fileif(it is availabe){load the class fileRetrieve lists of key fields and indeces for this tableStore these lists in hashtables for easy access}else throw an exception}  清单3: 初始化数据库连接的伪码

  Take an object A containing a series of (name,value) pairsfor each table T{for each (name,value) pair{if(name matches primary_key_field or index_field)store a refrence to both name and value}if all key_fields were foundcreate a query string using key names and valueselse if all index_fields were foundcreate a query string using index names and valuesexecute the query

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号