-
关于配置文件的问题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
目前还没有答案
相关推荐
动态修改配置文件, 支持中文且乱码问题已修复。配置文件读写更便捷
如下所示: import logging import logging.config logging.config.fileConfig(path) logger = logging.getLogger('') ...以上这篇浅谈python日志的配置文件路径问题就是小编分享给大家的全部内容了,希望能
【RDP Wrapper 配置文件更新脚本】 简介:由于 RDP Wrapper 多年未更新,自带的配置文件不支持新版本的远程桌面服务。因此我们只需更新配置文件即可。 用途:一键解决 RDP Wrapper 提示 Not listening [not ...
js 调用 webservice服务,出现的跨域问题,可通过在服务端修改web.config来解决服务端的跨域问题
windows7系统配置文件,可用于解决null弹窗问题。
自己使用的Source Insight 4.0配置文件
本文主要给大家介绍了关于MySQL中配置文件my.cnf因权限问题导致无法启动的相关解决过程,分享出来供大家参考学习,下面来一起看看详细的介绍: 问题描述 MySQL 无法启动,报如下错误: 问题分析 查看 MySQL 错误...
3:怎样去创建一个XML配置文件,也是一个相对头痛的问题; 4:最痛苦的是每次修改配置文件需要重启应用程序。 那么工具的优点就是 1:不再需要去设计你的配置文件,只需要在程序里面定义好你需要的属性,并将属性...
struts2配置文件改变位置问题
利用java可以读取配置文件信息,可以流来处理这个问题
1、该文件是csnd上被称为最新最强的配置文件上进行改进的。 2、原配置在编程中有如下缺点:小括号无法自动完成匹配;双引号和单引号无法跳出。 3、新配置加入了最新的auto-pairs插件,成功的解决了原版本的括号和...
ibatis用xml配置文件配置的使用,基本包括了ibatis遇到的所有问题
部分联想笔记本屏幕存在偏色情况(如偏蓝、偏黄等),观感太差,用这个文件按照说明配置后有明显改善。
eclipse配置文件没有提示问题解决方案.docx
古人云,窈窕淑女,君子好逑。一副好的外表确实让人心旷神怡,同样,一份护眼好看的软件使操作界面对程序员来说也能倍感愉悦,大大提升工作效率。...资源是Source Insight已经配置成护眼模式的配置文件。
自己开发一个工具类,为第三方应用提供调用接口,但是打包后测试过程中,发现了一个问题就是在用@Value获取配置文件内容的时候,无法获取我们的配置信息,也无法加载我们配置的默认值!具体配置如下: @Value("${...
解决phpMyAdmin配置文件现在需要一个短语密码问题
解决myeclipse自动关闭问题配置文件解决myeclipse自动关闭问题配置文件解决myeclipse自动关闭问题配置文件解决myeclipse自动关闭问题配置文件
添加log4j日志功能,配置文件的配置问题,和使用问题
当有开发环境,测试环境,预发环境,配置nginx时。都在nginx.conf文件中配置,导致会发生配置混乱,不清晰,为了解决这个问题引入了多配置文件