公务员期刊网 论文中心 正文

多类型数据库存储及访问实现

多类型数据库存储及访问实现

摘要:软件结构主要包括B/S结构、C/S结构等,无论哪种结构的软件,数据库应用占有很大的比例,常用的数据库包括MySQL、Oracle等多种类型,针对这一特点,介绍了多种类型数据库的存储与访问的实现方法。

关键词:数据库;多类型;多态性;抽象

工厂软件结构主要包括B/S结构、C/S结构等。B/S结构的软件主要应用于消费、OA、ERP等方面;C/S结构的软件主要应用于工业控制、电力监控等行业软件。无论哪种结构的软件,数据库应用占有很大的比例。常用的数据库包括SQLlite、MySQL、Oracle和SQLServer等,数据库的访问技术有ODBC、ADO、JDBC和动态链接库等,软件运行环境包括嵌入式系统、Windows和Lin-ux等。这就需要提供一个数据库接口技术,该接口技术能满足多种类型数据库,能运行在多种类型的操作系统上。该接口的提供具有很重要的意义:程序员不需要过多的关注各种数据库访问技术,更多地关注在实际的业务逻辑上;可以用在不同的应用软件系统中,使得代码的复用性高。

1接口设计

数据库软件包括SQLlite、MySQL、Oracle和SQLServ-er等,数据库的访问技术有ODBC、ADO、JDBC和动态链接库等,考虑到JDBC只能用于Java,ODBC和A-DO在嵌入式系统中并不支持。而SQLlite提供了开源代码用于对数据库进行存储与访问,MySQL和Oracle等数据库提供了不同操作系统的动态链接库和头文件用于对数据库进行存储与访问。因此,为了适应不同类型数据库软件和不同类型操作系统的要求,本接口使用动态链接库的访问技术对数据库数据库进行存储与访问。无论是哪种数据库,访问接口均需要对数据库进行连接、查询、插入、删除和关闭等操作,而SQLLite、MySQL等数据库又有各自的特性。根据这个特点,就自然想到了使用抽象工厂和C++的多态性实现数据库的访问接口。定义基类TDBAccessBase实现数据库访问,定义TDBAccessSQLlite继承基类用于访问SQLlite数据库。用同样方法定义子类用于访问MySQL、Oracle等数据库。数据库的访问设计已经可以满足访问数据库的要求。但是应用程序在使用接口时需要根据不同的数据库类型创建不同的子类的对象,这不能满足代码的复用性高的要求。因此,定义TDBInstanceBase实现访问实例的基类,在此基类中包含访问接口基类TDBAccessBase的对象,在构造函数中传入数据库类型,再根据传入的数据库类型创建不同的子类。定义TDBInstanceTable-Name,TableName对应数据库中的表名称,该类继承访问实例的基类TDBInstanceBase。他们之间的关系图如图1所示。在进行数据库的访问完成后,每种类型的数据库会返回不同的结果集,如果在应用程序调用数据接口后也返回不同的数据集,就不能在应用程序中屏蔽每种数据库的差异。为了解决这个问题,在数据库存储和访问接口中将返回的结果集的记录读出并保存在内存中,供应用程序调用。

2访问接口实现

定义枚举TDBType变量用于标识数据库的类型。TDBType的定义如下:定义结构TDBConfig,该结构包括的属性有host、port、user、passwd、dbName和dbPath。TDBConfig具体定义如下:TDBAccessBase中实现对数据库的打开、关闭、查询和定位等操作的虚函数;定义curRow用于标识数据库读取的当前位置;还定义了结构TRowData和TTable-Data的对象,用于将返回的结果集的记录保存。TD-BAccessBase的声明如下:TDBAccessMySQL对MySQL数据库的操作,是TD-BAccessBase的子类,在该类中调用MySQL提供的动态链接库,具体实现数据库的打开、关闭、查询和定位等功能。声明如下:SQLlite、Oracle等数据库采用类似于对MySQL定义的方法实现。

3实例接口实现

在实例基类TDBInstanceBase中定义了访问接口的基类TDBAccessBase的对象指针dbAccess,实例基类的构造函数传入数据库的配置和类型,构造函数根据数据库的类型创建具体数据库访问接口的对象。实例基类中对数据库的打开、关闭、查询和定位等方法就是调用对象dbAccess中对应的方法。实例基类的声明如下:字段用户编号和用户名称,则定义结构TUserTable,在TUserTable中包含两个属性Number和Name。则用户表的实例声明如下:

4结语

采用抽象工厂和多态性接口设计模式,使得数据库的访问代码与应用程序进行了分离,减少了它们之间的耦合性,有较好的重用性和较高的效率。

参考文献

[1]鄢涛,赵卫东,周晓清.基于C语言访问MySQL数据库的研究与实现[J].成都大学学报(自然科学版),2017,36(2):161-164.

[2]艾志刚,李丹.数据库访问设计[J].内燃机与配件,2017,10:95-97.

[3]祝玲.C语言访问数据库[J].计算机光盘软件与应用,2012,14:181-182.

作者:薛建中 单位:南京蓝人电力科技有限公司