Sci论文 - 至繁归于至简,Sci论文网。 设为首页|加入收藏
当前位置:首页 > 计算机论文 > 正文

基于 Java 的数据库通用转储工具的研究论文

发布时间:2023-10-21 14:38:33 文章来源:SCI论文网 我要评论














SCI论文(www.lunwensci.com)
 
   摘 要 :当今企业的信息化生产实践中,数据库的使用十分广泛,企业为了满足不同业务需求,需要配置不同类型的数据 库。为了确保数据库使用的安全性,兼顾高效性,降低数据存储迁移的难度,提高了数据的共享,研究了软件企业在生产实践 中进行数据库间数据转储的实际需求, 针对关系型数据库的数据库间数据转储的问题进行了调查, 提出了一种基于 Java 技术 开发实现的数据库转储工具的解决方案。

  关键词:数据转储,Java,数据库

  Research on a General Database Dumping Tool Based on Java

  ZHANG Yaru

  (Lianyungang Open University, Lianyungang Jiangsu 222006)

  【Abstract】:In today's enterprise information production practice, database is widely used, in order to meet different business needs, different types of databases need to be configured. To ensure the security of database use, considering efficiency, reduce the difficulty of data storage migration, improved data sharing, this paper studies the actual needs of software enterprises for data transfer between databases in production practice, the problem of data dump between relational databases was investigated, solution of database dump tool developed and realized based on Java technology is proposed.

  【Key words】:data dump;Java;data bank

  引言

  在当今企业的信息化生产实践中,数据库扮演了非 常重要的角色。企业为了满足不同业务需求引进不同类 型数据库,这些数据库之间通常存在差异,同时数据库 规模日渐庞大,复杂度日渐提升,都增加了数据转储或 迁移的难度 [1]。为了确保数据库使用的安全性,兼顾高 效性,降低数据存储迁移的难度,提高了数据的共享, 节省了大量的时间、人力,提出了基于 Java 技术开发 的转储工具的模型以及实现方法,以期解决不同数据库 之间的数据转储。

  1 转储工具简介

  转储工具(Dump Tool)采用了模块化的设计思想, 转储工具中的各个功能模块都封装成类,在主窗体中按 照需求,合理组织、引入各个功能模块。通过这种模式, 可以提高项目的健壮性,以及模块的复用程度 [2]。

  在项目中,将数据库操作统一使用 Dao 类进行封装 ;将项目中的各业务逻辑,分装成类或抽象为接口 ; 对于项目中的前台展示模块,根据具体需求,分别继承 相应的 Java Swing 组件 [3]。按照这种分层模式,实现 了底层数据库操作与业务逻辑的分离,业务逻辑与表示 层的分离,增强了系统的可读性及维护性。

\


 
  2 转储工具功能结构设计

  利用模块化的思想,设计转储工具的架构。同时, 基于转储工具的功能分析,转储工具由以下模块组成 : 数据库连接 / 切换模块、数据库操作模块、数据导出模 块、数据转储模块、工具主界面展示模块,如图 1 所示。

\

 
  数据库间转储工具的功能,首先是数据库的连接, 用户根据需求选择数据库。其次,在连接数据库之后, 根据所连接的数据库类型、用户,展示相应的工具主 界面。之后,根据需求查询要找的表或查看表的部分记 录,并选定。然后,根据需求对选定的对象进行导出数 据或转储数据的处理 ;对于导出数据,分别导出 XML、XLS、SQL 三种文件方式,同时又分完整与部分导出两 种处理方式 ;对于转储数据,分表的完整转储与选择部 分记录的部分转储。之后,用户可根据需求,进行数据 库的切换。

  3 转储工具核心模块(数据转储模块)的设计

  3.1 数据库处理

  数据库处理就是负责实现软件与数据库的数据交互 功能,将数据访问功能的方法进行封装、优化,提高代 码重用性及应用程序的开发效率,其主要操作对象是数 据库,在运行过程中包含了大量数据库操作(包括针对 数据库的系统数据字典的查询) [4]。在项目的研究开发中, 将数据库操作统一封装在 Dao.java 中 ;不同数据库的数 据类型转换,通过构造 DataTypeConvertor 类来实现 [5]。

  3.1.1 数据库操作的 SQL 脚本 获取指定表的结构。

  A.Oracle :

  SELECT COLUMN_NAME, DATA_TYPE, COLUMN_ ID,NULLABLE,CHARACTER_SET NAME, CHAR_COL_ DECL_LENGTH, DATA_PRECISION,DATA_SCALE FROM user tab_cols where table_name = '***' order by COLUMN_ID ; ---'***' 表示表名

  B.MSSQL :

  SELECT column_name , data_type , ordinal_ position , is_nullable , character_set_name ,

  character_octet_length, numeric_precision, numeric_scale from INFORMATION_SCHEMA. columns where table_name='***'; ---'***' 表示表名

  C.MYSQL :

  desc '***' ; ---'***' 表示表名

  3.1.2 数据库间数据类型转换的主要思想

  对于关系型数据库而言,所提供的数据类型主要有 数值型数据、字符串型数据、时间型数据、二进制数据 等。同时,不同厂家的数据库产品对于同一数据类型可 能有不同分类、不同命名,这给实现不同数据库间转储 带来了难题,不同数据库产品难以直接转储。因而,这 个问题的解决是实现不同类型数据库间数据转储的关键。

  经过深入的研究、比对, 本转储工具采用较为稳妥 的策略解决该问题,转储工具通过一个数据库字段类 型转换类(DataTypeConvertor) 来实现数据库类型 名的转换。在转储工具处理数据转储过程中,先实例 化 DataTypeConvertor 类的对象, 设定转储源数据库 和目标数据库的类型标识(在本转储工具运行时,对 于连接不同类型的数据库设定不同的标识, ORACLE、 MYSQL、MSSQL 分别设定为 0、1、2)。之后, 根据 要转储的表的结构信息(主要是表的字段信息)通过 DataTypeConvertor 的 dataConvert() 方法遍历表 的 字段信息,根据设定的源数据库标识和目标数据库标 识,选择相应的数据类型转换方法,对数据类型名转换 为对应的目标数据的类型名。完成对转储的表进行的 “源数据库— 目标数据库”数据类型转换后, 工具的转 储模块将针对转换后的表结构信息,生成与目标数据库 相符的建表信息以及 INSERT 插入语句集,然后实现数 据库间的数据转储。

  3.2 数据转储模块

  3.2.1 批量转储子模块

  转储工具中,批量转储是用户通过查询窗口的主表 中选择一个以上的表,然后实现选定表的转储,对于单个 数据表是将其所有数据转储到目标数据库中,是完整的转 储。选择数据表后,选定的表名将存储在 Subindex(是 List 类型)的链表中 ;当单击“批量转储”按钮 后, 将遍历获取 Subindex 中的要转储的表名, 然后根据 当前获取的表名实例化用于处理完整转储的 DumpTable 类的对象,在 DumpTable 的方法中实现转储。

  DumpTable 类中调用其 beginToDump() 方法, 在 该方法中首先获取指定表的参照关系链表。对于没有参 照关系的表,则直接调用 execInsert() 方法将转储数据 插入目标数据库中 ;对于有参照关系的表,则采用递归 算法,根据被参表名实例化一 DumpTable 类的对象, 直到参照关系的“最顶层”表(该表应没有外键约束), 执行 execInsert() 方法将数据插入目标库中 ;然后,递 归返回依次完成表的转储。这一递归过程,实现了数据表关系的准确对应。实现批量转储核心代码 :

  // 完整转储启动方法

  private void beginToDump()

  {

  usePreConnect();

  // 获取当前表的参照关系

  refList=Dao.getRefForDump_Totally(tableName); if(null==refList||refList.isEmpty()) execInsert(); else{

  // 根据参照关系链表,采用递归算法,优先转储被 参照表

  for(int i=0;i

  {

  String curRef=refList.get(i);

  new DumpTable(curRef);

  }

  execInsert();

  }

  }

  // 完整转储执行批量插入

  private void execInsert()

  {

  Dao dao=new Dao();

  TableInfo tempTable=Dao.getTableInfo (tableName);

  String create_sql=dao.getCreateSQL(tableName);

  int count=Dao.getTableRecordCounts(tableNa me);

  if(count==0{

  useDestConnect();

  dao.createTable(create_sql);

  }else{

  List insert_sql=null;

  // 表记录不足 20000 直接转储

  if(count<20000){

  insert_sql=dao.createInsertSQL_ALL(tempTable);

  ……

  dao.execInsertBatch(insert_sql);

  }else

  {// 超过 20000. 采用“分页”策略批量转储 useDestConnect();

  dao.createTable(create_sql);

  int parts=count/10000;

  if(count%10000!=0)

  parts++;

  for(int i=1;i<=parts;i++)

  {

  usePreConnect();

  insert_sql=dao.createInsertSQL_Partly(temp Table, i, 10000);

  useDestConnect();

  dao.execInsertBatch(insert_sql);

  ……

  }

  3.2.2 部分转储子模块

  转储工具提供部分转储,首先是查询指定的一张数 据表,按一定的顺序获取表的所有记录,并予以展示 ; 对于记录较多的表进行分页展示,每次展示其中的部分 数据,根据需求可以上下翻页进行数据的挑选。之后将 选定的表的关键字段值存入 Detindex(List 类 型) 链表中, 设定好转储目标数据库后, 通过 Detindex 实例化一个部分转储类 PartlyDump 的对象,通过 PartlyDump 的方法实现部分转储。

  部分转储子模块相关核心代码 :

  // 部分转储启动方法

  private void beginToDump(){

  usePreConnect();

  Dao dao=new Dao();

  // 获取参照表

  List list=Dao.getRefForDump_Partly(valueEX. getTableName());

  List lastSQL=dao.createInsertSQL_ ByKey(valueEX);

  if(null==list||list.isEmpty()) execInsert (lastSQL);

  else{

  simplizeRef(list);

  // 根据参照关系链表,采用递归算法,优先转储被 参照表

  for(int i=0;i

  RefConstraint curRef=refList.get(i);

  // 生成指定记录关键值

  ColumnValueEX curEX=new ColumnValueEX();

  curEX.setTableName(curRef.getRefTable Name());

  curEX.setColumnName(curRef.getRefColumn Name());

  List tempValue=Dao.getRefKeyByKey(curRef, valueEX);

  if(tempValue.size()!=0){

  for(int k=0;k

  curEX.setValue(tempValue.get(k));

  new PartlyDump(curEX);

  ……

  }

  // 部分转储执行插入操作

  private void execInsert(List lastSQL) {

  Dao dao=new Dao();

  String create_sql=dao.getCreateSQL(valueEX. getTableName())

  useDestConnect();

  // 首先在目标数据库中建表

  dao.createTable(create_sql);

  // 批量操作批处理

  dao.execInsertBatch(lastSQL);

  usePreConnect();

  }

  4 项目实施部署

  本转储工具的研究,是基于Java 技术开发的Java桌面应用程序,研究过程中使用Jdbc 操作数据库,使用 Java Swing 开发工具的前台操作界面。采用 NetBeans IDE 平台开发,转储工具开发完成后,应将项目打包成 .jar 文件。

  5 结语

  基于不同数据库之间的通用转储工具的研究,源于某 信息技术有限公司实际生产中所遇到的实际问题,因而是 一次解决实际问题的一次探究, 故具有一定的实用价值和 意义。项目实践中,应用了Java 技术, Java 自身所拥有 的良好特性, 使得研究的成果具有良好的使用功能以及一 定的跨平台性能,在操作系统层面上增加了通用性。

  参考文献

  [1] 艾萍,曾顺,岳兆新.异构数据库转储平台设计与实现[J].信息 技术,2013.37(9):18-22+27.

  [2] 刘如九,张振山,柴天佑.一种通用的多数据库间数据抽取方 法及应用[J].北京交通大学学报,2008(4):14-18.

  [3] 耿祥义,张跃平.Java2实用教程(第三版)[M].北京:清华大学 出版社,2006.

  [4] 何明,何茜颖.Oracle SQL培训教程[M].北京:清华大学出版 社,2010.

  [5] 郭珺.基于SQL Server的主动式数据转储技术研究[D].哈尔 滨:哈尔滨工程大学,2017.
 
关注SCI论文创作发表,寻求SCI论文修改润色、SCI论文代发表等服务支撑,请锁定SCI论文网!

文章出自SCI论文网转载请注明出处:https://www.lunwensci.com/jisuanjilunwen/65265.html
本文标签: 数据转储 ,Java ,数据库

发表评论

Sci论文网 - Sci论文发表 - Sci论文修改润色 - Sci论文期刊 - Sci论文代发
Copyright © Sci论文网 版权所有 | SCI论文网手机版 | 鄂ICP备2022005580号-2 | 网站地图xml | 百度地图xml