【问题标题】:How to read data from an XML file and store it into database (MySQL)?如何从 XML 文件中读取数据并将其存储到数据库(MySQL)中?
【发布时间】:2009-11-24 21:17:33
【问题描述】:

我需要从 XML 文件中获取数据并将其存储到 MySQL 数据库中。我正在考虑使用 SAX 解析器来解析数据,但我不确定如何将数据有效地存储到数据库中,我正在考虑像 JDBC 和 Hibernate 这样的一些技术,但我想问一下会是什么有效率吗?

注意:这里的编程语言是Java。

【问题讨论】:

  • 这非常广泛 - 您需要详细说明您的实际数据以及您想用它做什么。
  • 我正在获取在线目录作为数据以及一些业务规则,我需要根据一些业务规则和其他考虑修改传入数据并创建规范数据模型,然后将相关数据存储到 MySQL 数据库中.
  • 这里的问题是完成以下任务什么是更好的工具,任务:“需要解析一个XML文件,它有数据以及决策规则,并将数据存储到数据库中(mysql现在但可以未来的变化)并与处理 XML 文件中存在的决策规则的 ILOG JRules 的 java 代码交谈”,现在讨论哪个是完成任务的更好工具,PERL 或 Java,并考虑与执行速度相比发展速度。

标签: java sql mysql xml


【解决方案1】:

我建议使用 JAXB 将 XML 读入 Java 对象并使用 JPA 将它们写入数据库。您可以使用 Java 类创建单个数据模型,该类具有使用 JAXB 的 XML 绑定注释和使用 JPA 的数据库持久性注释。

@Entity
@Table(name="Foo")
@XmlRootElement
public class Foo {
    // ...
}

JAXB annotations 上的信息。 JPA的信息。

【讨论】:

  • 我是 JAXB 和 JPA 的新手,您会建议我去哪里获取对我的任务有用的相关信息。
  • EclipseLink 是一个很好的地方,因为它提供了 JAXB 和 JPA(它是 RI)实现。可以在此处找到如何使用这些技术的示例 - wiki.eclipse.org/EclipseLink/Examples/MOXy/JPA
【解决方案2】:

你可以使用Castorwitch 是一个开源数据绑定框架,用于从 XML 到 Java 编程语言对象以及从 Java 到 数据库。

我还在IBM developerWorks 中找到了描述使用适合您需求的 Castor 的文章系列。

【讨论】:

  • @Cetnar:非常感谢您提供的信息。我会通过它。
  • @Cetnar:对于大型数据集 (>1GB) 是否可以很好地扩展
  • @Rachel:你有大 (>1GB) xml 文件吗?如果性能是一个问题,您可以尝试其他 JAX 库,例如 jibx.org 或使用 StAX 解析器解析 xml。这里 id 链接到类似库的性能测试 ibm.com/developerworks/xml/library /x-databdopt2/ - 我想有点过时了
  • @Cetnar:我的 xml 文件大于 1GB,是的,如果我使用 castor,性能也是主要问题,我可以使用它将 java 对象映射到 MySQL 但如果我打算使用 jibx或 StAX 比将 java 对象映射到 MySQL 的最佳方法是什么? Hibernate/JPA/JDBC 或者哪种技术对我来说是有效的?
  • 如果您只计划从 xml 中移动(和动态修改)数据,那么我认为从性能视图来看,纯 JDBC 将是最有效的。
【解决方案3】:

这取决于许多因素。如果您的 XML 太大(> 1GB 或与您的总内存相当),那么您应该使用 SAX,我认为不会有其他解决方案。如果它很小(比如小于 100MB),只需使用 JAXP 将整个 XML 加载到 Document 对象中:

DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder parser = documentBuilderFactory.newDocumentBuilder();
Document doc = parser.parse(source);

您可能将元素或属性映射到 DB 上的列。然后,为了简单起见,您可以使用 XPath 查询元素/属性并将它们写入数据库。这是一次性转换,我建议使用简单的 JDBC。不要考虑 JPA 或 Hibernate,因为它只会增加常规数据转换场景的开发时间。

【讨论】:

  • @Mohsen:这不是一次转换,这意味着它存储在 MySQL 中,而不是我将来可能必须根据业务/决策规则的变化来更改它,所以我的要求仍然是 JDBC选择或使用 Hibernate 或 JPA 或其他一些 ORM 技术(如 TopLink、Ibatis)的正确选择会有用吗?
【解决方案4】:

您可以直接使用 blob 将 XML 存储到 mySQL... ,这里是相关文章的链接

Index XML documents with VTD-XML

【讨论】:

  • 我必须根据决策规则对 XML 进行某种操作,所以这种方法对我来说有用吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-03-06
  • 1970-01-01
  • 2013-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多