【问题标题】:What is the best way to import xml to a database (using java)将xml导入数据库的最佳方法是什么(使用java)
【发布时间】:2009-04-02 05:18:48
【问题描述】:

我刚刚编写了一个程序,用于使用 dom4j 将数据从 xml 文件导入数据库。它最终成为一系列用 java 包装的 xpath 语句,并且它有效,但我强烈认为有更好的方法来做到这一点。

将数据从 xml 导入数据库的首选方法是什么?

【问题讨论】:

    标签: java xml database


    【解决方案1】:

    根据您拥有的 XML 类型,JAXB(这是自 1.6 以来 Java SE 的标准部分)可能是最直接的处理方式。只需创建一个类似于您的 XML 结构的类,将字段的 setter 和 getter 以及 @XmlRootElement 注释放在类的顶部。然后像

    Unmarshaller um = JAXBContext.newInstance(YourClass.class).createUnmarshaller();
    YourClass input = (YourClass) um.unmarshal(new FileReader("file.xml"));
    

    神奇地将您的 XML 文件转换为 Java 对象。那么写入您选择的数据库应该很容易。

    【讨论】:

    • 在我看来,JAXb 的一个问题是它需要一个 xsd。
    • 嗯,不。我正在使用上面的代码,并且没有 xds。该结构在上面表示为一个类(YourClass)。
    【解决方案2】:

    我发现Simple 非常容易用于从 XML 创建 Java 对象。我们使用它来设置默认配置,然后我们可以使用 Hibernate 进行存储。

    【讨论】:

      【解决方案3】:

      我经常遇到同样的问题,希望 10 年前我拥有和现在一样的工具。

      如果你需要将现有的 XML 读入普通的 Java 类,我个人认为 apache digester 比 dom4j 更优雅,更容易使用,因为你只需指定映射。

      然后,使用 Hibernate 将材料写入数据库。

      【讨论】:

        【解决方案4】:

        这实际上取决于您的 XML 文件的格式。能否进一步说明?

        在我的例子中,我有一个应用程序,它在 XML 中存储了一个简单的 Key->Value 对语法,我在其中使用 DOM 遍历节点并生成 SQL 来插入数据。

        使用 XPath 来做这将是一个完美的解决方案

        【讨论】:

          【解决方案5】:

          在尝试其他任何事情之前,您应该问自己几个问题:

          • 值得清洗吗?如果该应用的使用频率不高,请“不要修复未损坏的内容”。
          • 会经常更改吗?在这种情况下,易于维护和可读性是最重要的,而 dom4j 在这方面可能还不错。
          • 性能是否重要?如果您的应用在一半的时间内运行没有任何影响,请返回上一个项目符号:在这种情况下,“更好”仅意味着更整洁。

          【讨论】:

            【解决方案6】:

            这当然取决于你在做什么。我假设您想从 XML 文档中提取数据。如果是这样,xpath 可能工作正常,但我个人仍然更喜欢数据绑定:读取 XML,绑定到 java 对象,通过常规 Bean/POJO 访问器获取数据。 或者更好的是,如果使用 ORM,则绑定到 ORM(如休眠)可以使用的对象。

            对于 datd 绑定,我会投票给 JAXBXStream。如果使用 xpath,我只会使用任何 DOM 替代方案。

            【讨论】:

              猜你喜欢
              • 2011-05-13
              • 2011-02-19
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2020-07-28
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多