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
目前还没有答案

相关推荐

Global site tag (gtag.js) - Google Analytics