美文网首页
Java将数据库中表中字段转化为xml

Java将数据库中表中字段转化为xml

作者: Tank丶Farmer | 来源:发表于2019-09-29 17:23 被阅读0次

最近在使用元数据开发页面,在开发的过程中遇到了一个问题,需要将数据库中的表字段以及相应的类型等信息转化为固定格式,并存入xml文件中。
刚开始的我,一本正经的在复制着每行的格式,然后对照着数据字典来一个一个添加。随着做的时间越来越长,最终当我遇到了一个表中有100多个字段的时候我崩溃了,撸完这么多内容我岂不是大半天都浪费了,而且也没什么成就感。不愿循规守矩的我决定自己写一个简单的工具类!
我先讲下我的大体思路,以便下面方便各位老师理解。首先将连接到相应数据库,然后读取相应表信息,读取之后将相应的信息整合,然后再按照自己所需要的格式输出到xml文件中。So easy!
闲话不多说,直接上代码。
首先是连接数据库

public DomainMetaBuildTest(String tableName) {

        this.tableName = tableName;
        try {
            //驱动注册
            Class.forName(DRIVERCLASSNAME);
            if (connection == null || connection.isClosed()) {
                //获得链接
                connection = DriverManager.getConnection(URL, USER, PASSWORD);
            }
        } catch (ClassNotFoundException ex) {
            ex.printStackTrace();
            System.out.println("Oh,not");
        } catch (SQLException e) {
            e.printStackTrace();
            System.out.println("Oh,not");
        }
    }

接下来是获取数据库表中的相应数据

/**
     * 功能描述:获取数据库相应信息
     */
    private List<String> doAction() {
        String sql = "select * from " + tableName;
        List<String> list = new ArrayList<String>();
        try {
            PreparedStatement statement = connection.prepareStatement(sql);
            //获取数据库的元数据
            ResultSetMetaData metadata = statement.getMetaData();
            ResultSet rs = connection.getMetaData().getPrimaryKeys(null, null, tableName);
            String id = "";
            //获取组键字段
            if (rs.next()) {
                id = rs.getString(4);
            }
            //数据库的字段个数
            int len = metadata.getColumnCount();
            //字段名称
            colNames = new String[len + 1];
            //字段类型 --->已经转化为java中的类名称了
            colTypes = new String[len + 1];
            //字段长度
            colLengths = new Integer[len + 1];
            for (int i = 1; i <= len; i++) {
                //获取字段名称
                colNames[i] = metadata.getColumnName(i);
                list.add(colNames[i]);
                //获取字段类型
                Integer displaySize = metadata.getColumnDisplaySize(i);
                colTypes[i] = convertType(metadata.getColumnTypeName(i), displaySize);
                colLengths[i] = displaySize;
            }
            list.add(id);
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return list;
    }

最后是将处理后的数据存入xml文件中,此处可以根据自己的相应的格式处理,此段可改成自动生成Java实体类。

private void createXml() {
        try {
            // 创建解析器工厂
            DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
            DocumentBuilder db = factory.newDocumentBuilder();
            Document document = db.newDocument();
            // 不显示standalone="no"
            document.setXmlStandalone(true);

            Element root = document.createElement("attributes");

            // 此处 for 循环可替换成 遍历 数据库表的结果集操作;
            for (int i = 0; i < colNames.length; i++) {

                // 创建节点 attribute
                Element elements = document.createElement("attribute");
                if (colNames[i] != null) {
                    // 给 attribute 节点添加属性
                    elements.setAttribute("columnName", colNames[i]);
                    elements.setAttribute("name", colNames[i]);
                    elements.setAttribute("title", "");
                    elements.setAttribute("type", colTypes[i]);
                    elements.setAttribute("iLength", String.valueOf(colLengths[i]));

                    root.appendChild(elements);
                }

            }
            document.appendChild(root);

            // 创建TransformerFactory对象
            TransformerFactory tff = TransformerFactory.newInstance();

            // 创建 Transformer对象
            Transformer tf = tff.newTransformer();
            //设置首行缩进
            tf.setOutputProperty(
                    "{http://xml.apache.org/xslt}indent-amount", "4");
            // 输出内容是否使用换行
            tf.setOutputProperty(OutputKeys.INDENT, "yes");

            // 创建xml文件并写入内容
            File file = new File("D:/MetaFiles/" + GetTuoFeng(tableName) + ".xml");
            tf.transform(new DOMSource(document), new StreamResult(file));

            System.out.println("生成" + GetTuoFeng(tableName) + ".xml成功");
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("生成" + GetTuoFeng(tableName) + ".xml失败");
        }
    }

最后是在main方法中进行调用啦

    public static void main(String[] args) {
        DomainMetaBuildTest bean = new DomainMetaBuildTest("tableName");
        bean.getClassStr();
    }

有些地方仍需要优化,只是简单的写了个工具类,后面会慢慢优化下。请各位老师多多指教,一个努力的小白~

相关文章

  • Java将数据库中表中字段转化为xml

    最近在使用元数据开发页面,在开发的过程中遇到了一个问题,需要将数据库中的表字段以及相应的类型等信息转化为固定格式,...

  • mybatis时间格式的问题

    数据库中的时间字段定义为 datetime ,Java 代码中对应的字段定义如下: Mybatis 的xml文件中...

  • using

    JAVA md5 将json转化为java对象 转化xmlToJSONjson转xml 遍历map: 线程池线程池...

  • 有关Hibernate知识的学习(一)

    1、Hibernate使用xml文件将java类映射到数据库中

  • 数据库基础知识2

    修改字段长度: 向某个数据库表中的添加字段: 查看数据库中表的数量: 修改数据库表中的备注信息: 修改数据库表名的...

  • C#-跨库数据同步---字符串链接数据库

    需求:将A数据库中某个表中的几个字段的数据,同步到B数据库中的某个表中 思路:从xml文件中读取源数据库的信息,目...

  • kettle_3添加数据库表字段

    根据excel表数据字段中表名、字段名、字段类型、类型长度、小数长度,在数据库对应表中添加相应字段。1.excel...

  • Xstream反序列化漏洞

    1. Xtream实现序列化 XStream是Java类库,可以将对象序列化为XML格式或将XML反序列化为对象。...

  • 自动生成java bean定义工具

    功能介绍 将excel定义的字段转化为java(kotlin) bean定义excel定义的字段类型样例: 生成k...

  • 201104:number对应类型-duceap中swagger

    一. Oracle数据库中number对应什么字段类型 数据库中为number类型的字段,在Java类型中对应的有...

网友评论

      本文标题:Java将数据库中表中字段转化为xml

      本文链接:https://www.haomeiwen.com/subject/ghxqpctx.html