0 0

关于配置文件的问题10

现在我需要一个工具,用xml文件对mysql和db2数据库进行相互转换
这是mysql.xml
<?xml version="1.0" encoding="UTF-8"?>
<schemas>
    <schema>
        <table name="client">
            <pk name="PRIMARY" column="CLIENT_NAME"/>
            <column name="CLIENT_NAME" type="varchar" not-null="true" size="50"/>
            <column name="IP" type="varchar" size="50"/>
            <column name="PORT" type="varchar" size="50"/>
            <column name="ALIAS_NAME" type="varchar" not-null="true" size="50"/>
            <column name="PARAMETERS" type="longvarbinary" type-name="mediumblob" size="16777215"/>
        </table>
        <table name="etl_script">
            <pk name="PRIMARY" column="ES_NAME"/>
            <column name="ES_NAME" type="varchar" not-null="true" size="50"/>
            <column name="SCRIPT_CONTENT" type="longvarbinary" type-name="mediumblob" size="16777215"/>
            <column name="ENCODING" type="varchar" not-null="true" size="50"/>
        </table>
   </schema>
</schemas>

这是bd2.xml
<?xml version="1.0" encoding="UTF-8"?>
<schemas>
    <schema  name="TO_MONITOR">
 <table name="CLIENT">
            <pk name="SQL121022103751840" column="CLIENT_NAME"/>
            <column name="CLIENT_NAME" type="varchar" not-null="true" size="50"/>
            <column name="IP" type="varchar" size="50"/>
            <column name="PORT" type="varchar" size="50"/>
            <column name="ALIAS_NAME" type="varchar" not-null="true" size="50"/>
            <column name="PARAMETERS" type="blob" size="1048576"/>
        </table>
<table name="ETL_SCRIPT">
            <pk name="SQL121022103751920" column="ES_NAME"/>
            <column name="ES_NAME" type="varchar" not-null="true" size="50"/>
            <column name="SCRIPT_CONTENT" type="blob" size="1048576"/>
            <column name="ENCODING" type="varchar" not-null="true" size="50"/>
        </table>
   </schema>
</schemas>

需求:统一程序入口来进行转化(输入xml,输出xml,需要转化的格式要求,能选取部分表或全部表,控制台的)
数据库转换区别
mysql--db2
1.db2设置schema名字(myslq中schema没有名字属性)
2.表的主键name由PRIMARY(mysql中)改为SQL121022103751960(db2),后面四位数字随机,目前没有找出规律
3.mysql中type="longvarbinary" type-name="mediumblob" size="16777215"在db2中改为type="blob" size="1048576",把     type-name属性删除,type属性改为blob,size属性改为1048576
4.sql中type="integer" type-name="int"在db2中删除type-name="int"
这是我的代码
import java.io.File;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Random;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

import com.cxt.interf.ITransform;

/**
 * @description Msql转换DB2
 * @author sumist
 *
 */
public class MysqlToDB2 implements ITransform{
	private static final String XPATH = "//column";
	private static final String NAME = "name";
	private static final String SCHEMA = "schema";
	private static final String TYPENAME = "type-name";
	private static final String TYPE = "type";
	private static final String INTEGER = "integer";
	private static final String LONGVARCHARBIGARY = "longvarbinary";
	private static final String SIZE = "size";
	private static final String BLOB = "blob";
	private static final String SIZEVALUE = "1048576";
	public static final char[] CHARS = { '2', '3', '4', '5', '6', '7', '8',
		'9', '0', '1'};
	public static Random random = new Random();

	public static String getRandomString() {
		StringBuffer buffer = new StringBuffer();
		for (int i = 0; i < 6; i++) {
			buffer.append(CHARS[random.nextInt(CHARS.length)]);
		}
		return buffer.toString();
	}
	private static final String newPK = "SQL12102210375";
	public void parserXml(String inputfileName,String outputFileName,String schamename) {
		// 1.非空校验
		CheckNull cn = new CheckNull();
		cn.checkNull(inputfileName,outputFileName,schamename);
		CreateXml cx = new CreateXml();
		//2.解析输入xml
		File inputXml=new File(inputfileName);
		SAXReader saxReader = new SAXReader();
		Document document = null;
		try {
			document = saxReader.read(inputXml);
			//3.修改转换
			transform(document,schamename);
			} catch (DocumentException e) {
				ExceptionUtil.throwActualException(e);
			}
		//4.保存
		cx.createXml(document, outputFileName);
		}
	/**
	 * @description 转化部分表
	 * @param inputfileName
	 * @param outputFileName
	 * @param list  表list
	 */
	public void parserXml(String inputfileName, String outputFileName,
			List<String> list,String schamename) {
		// 1.非空校验
		CheckNull cn = new CheckNull();
		cn.checkNull(inputfileName, outputFileName,list,schamename);
		TransformUtil tu = new TransformUtil();
		CreateXml cx = new CreateXml();
		//2.解析输入xml
		File inputXml = new File(inputfileName);
		SAXReader saxReader = new SAXReader();
		Document document = null;
		Document doc = null;
		try {
			document = saxReader.read(inputXml);
			doc = DocumentHelper.createDocument();
			Element root = document.getRootElement();
			Element root2 = doc.addElement(root.getName());
			Element schema = root.element(SCHEMA);
			Element schema2 = root2.addElement(schema.getName());
			//3.得到指定表
			tu.getTable(document, schema2, list);
			//4.修改转换
			transform(doc,schamename);
		} catch (DocumentException e) {
			ExceptionUtil.throwActualException(e);
		}
		//5.保存
		cx.createXml(doc, outputFileName);
	}

	/**
	 * @description 转换规则
	 * @param document
	 * @param schamename
	 */
	@SuppressWarnings("unchecked")
	private void transform(Document document,String schamename) {
		TransformUtil tu = new TransformUtil();
		//对column的操作
		List<Element> nodes = (List<Element>) document.selectNodes(XPATH);
		Iterator<Element>  iter = nodes.iterator();
		while(iter.hasNext()){
		Element ele = (Element)iter.next();
		operateColumn(ele);
		}
		//对PK的操作
		List<Element> pks = (List<Element>) document.selectNodes("//pk");
		Iterator<Element>  it = pks.iterator();
		while(it.hasNext()){
		Element ele = (Element)it.next();
		tu.addAttribute(ele, NAME, newPK + getRandomString());
		}
		//对schame的操作
		Element schema = (Element) document.selectSingleNode("//schemas/schema");
		tu.addAttribute(schema, NAME, schamename);
	}
	
	/**
	 * @description column节点的操作
	 * @param element
	 */
	private static void operateColumn(Element element) {
		TransformUtil tu = new TransformUtil();
		if(INTEGER.equals(element.attributeValue(TYPE))) {
			element.remove(element.attribute(TYPENAME));
		}else if(LONGVARCHARBIGARY == element.attributeValue(TYPE) || LONGVARCHARBIGARY.equals(element.attributeValue(TYPE))) {
			element.remove(element.attribute(TYPENAME));
//			element.remove(element.attribute(TYPE));
//			element.remove(element.attribute(SIZE));
			tu.addAttribute(element, TYPE, BLOB);
			tu.addAttribute(element, SIZE, SIZEVALUE);
		}
		
		
	}
	

	public static void main(String[] args) {
		MysqlToDB2 md = new MysqlToDB2();
		List<String> list = new ArrayList<String>();
		list.add("TASK_RECORD");
		list.add("TASK");
		list.add("MO_ALERT_RULE");
		md.parserXml("E:" + File.separator + "mysql_2xml(1).xml", "E:" + File.separator + "db2_2xml(2).xml",list,"htyh");
		md.parserXml("E:" + File.separator + "mysql_2xml(1).xml", "E:" + File.separator + "db2_2xml(3).xml","jmu");
	}
	@Override
	public void parserXml(String inputfileName, String outputFileName) {
		// TODO Auto-generated method stub
		
	}
	@Override
	public void parserXml(String inputfileName, String outputFileName,
			List<String> list) {
		// TODO Auto-generated method stub
		
	}

}


要求转换规则要用配置文件来加载,这点我就不知道怎么写了,求指点,谢谢
2012年11月06日 17:08
目前还没有答案

相关推荐

    笔记本颜色配置文件

    颜色配置文件就是为了修正这些问题而存在的。用户可以通过安装合适的颜色配置文件来改善屏幕色彩,使得颜色更接近真实,提高视觉体验。 关于“i1PRO_E14A_20140422.icm”这个文件名,我们可以解读出以下信息: - ...

    vSphere 主机配置文件 5.5

    vSphere 主机配置文件是VMware vSphere虚拟化平台的一个重要组成部分,它允许IT管理员创建、管理和应用配置文件来标准化和自动化vCenter Server中的ESXi主机配置。使用vSphere主机配置文件可以提高效率并减少重复...

    proe config配置文件大全

    标题中的“proe config配置文件大全”指的是针对Pro/Engineer Wildfire 5.0(简称ProE 5.0)软件的一系列配置文件集合。ProE是一款由PTC公司开发的三维参数化建模软件,广泛应用于产品设计和工程领域。配置文件是...

    java 动态修改配置文件

    本文将深入探讨如何在Java中实现动态修改配置文件,同时解决中文字符编码问题,使得配置文件的读写更加高效和便捷。 首先,我们需要理解Java中的Properties类,它是处理配置文件的标准工具。`java.util.Properties`...

    windows找不到本地配置文件

    ### Windows 找不到本地配置文件问题解析与解决方案 #### 问题背景 在使用Windows XP操作系统的过程中,用户可能会遇到这样一个问题:系统刚启动进入操作界面时,会弹出一个对话框提示:“Windows 找不到本地配置...

    联想笔记本屏幕色彩配置文件

    联想笔记本的色彩配置文件通常是一种ICC(International Color Consortium)文件,它包含了关于显示器色彩特性的一系列参数,用于指导操作系统如何正确地显示颜色。这些参数包括显示器的色彩空间、亮度、对比度、...

    Linux C语言的配置文件操作库

    在Linux系统中,C语言作为底层编程的主要工具,其对配置文件的操作往往涉及到繁琐的文件I/O操作。然而,为了简化这一过程,开发者通常会利用特定的库来处理配置文件,比如读取、写入、解析键值对等。本文将深入探讨...

    海康威视配置文件解码专用工具器.rar

    本文将详细讲解海康威视配置文件解码的专业知识,以及如何利用“海康威视配置文件解码专用工具器”进行操作。 首先,了解什么是配置文件。在海康威视的设备中,配置文件通常包含了摄像头、NVR(网络视频录像机)或...

    LabVIEW 写入与读取配置文件

    在LabVIEW中,配置文件是用于存储应用程序设置、参数或状态的关键元素。这些文件通常以.ini或.xml格式存在,允许程序在运行时根据这些配置进行自定义行为。本教程将深入探讨如何在LabVIEW中进行配置文件的写入与读取...

    保存配置文件和读取配置文件

    在IT行业中,保存和读取配置文件是软件开发中的一项基本任务。配置文件通常用于存储应用程序的设置、选项以及变量,使得程序可以根据用户的需求或环境条件进行个性化调整。这一过程对于提升用户体验和软件的可定制性...

    C#获取和修改配置文件信息

    修改配置文件时,应考虑安全性问题。确保只有授权的代码和服务能够访问和修改配置,避免敏感信息泄露。在生产环境中,敏感数据(如API密钥)通常不应存储在配置文件中,而应使用更安全的存储方式,如环境变量或加密...

    系统配置文件的使用

    已解决的问题可能涉及到配置文件的正确设置和使用,而待解决的问题可能与特定配置文件的配置不当或者系统环境有关,需要进一步调查和调试。 总之,Oracle EBS中的配置文件是系统定制和管理的重要工具。理解其工作...

    超牛的小狼毫输入法配置文件

    - **备份原有配置**:在覆盖新配置之前,建议先备份原有配置文件,以防万一出现问题可以快速恢复。 - **下载优化配置**:可以从网上找到由其他用户分享的优化配置文件,比如通过GitHub获取。这里提到的大佬配置文件...

    华硕FX505GT型号色彩配置文件

    用户可以通过导入这个配置文件,解决GameVisual功能无法正常运行的问题,从而重新获得对屏幕显示效果的控制。 ** Armoury Crate详解 ** Armoury Crate 是华硕推出的一款综合管理软件,它集成了系统性能调节、风扇...

    保存和恢复思科配置文件

    * 备份和恢复思科路由器配置文件需要在特权模式下进行,以免出现权限不足的问题。 结论 备份和恢复思科路由器配置文件是网络管理员日常工作中非常重要的一部分。通过备份和恢复思科路由器配置文件,可以快速恢复...

    tunsafe 配置文件

    《Tunsafe配置文件详解与应用》 Tunsafe是一款备受用户青睐的安全网络工具,它通过配置...理解配置文件的结构和含义,不仅可以个性化设置,还可以在遇到网络问题时快速诊断和解决,从而享受更加安全、流畅的网络环境。

    凯立德配置文件解析

    了解并解析这些配置文件有助于我们定制化导航功能,优化用户体验,或者在出现问题时进行故障排查。本文将深入探讨凯立德配置文件的结构、内容以及解析方法。 首先,凯立德导航的配置文件通常以`.ini`为扩展名,这是...

    备份cisco路由器配置文件

    如果路由器的配置文件出现问题,可以使用命令 `copy tftp running-config` 从 TFTP 服务器中拷贝备份的配置文件。网络管理员需要输入 TFTP 服务器的 IP 地址和需要恢复的配置文件名。 备份与恢复 连接一台 UNIX ...

    Spring 加载多个配置文件

    2. **增强可读性**:使每个配置文件聚焦于特定的功能模块,便于理解和定位问题。 3. **遵循软件工程原则**:“分而治之”的策略有助于模块化设计,便于团队分工合作。 #### 三、加载多个配置文件的方法 Spring ...

Global site tag (gtag.js) - Google Analytics