【问题标题】:Java XML To String for Large FileJava XML 到大文件的字符串
【发布时间】:2016-02-03 08:41:22
【问题描述】:

我有超过 100MB 或更多的大型 XML 文件。我使用此代码。

        StringWriter writer = new StringWriter();
        DocumentBuilderFactory domFact = DocumentBuilderFactory.newInstance();
        DocumentBuilder builder = domFact.newDocumentBuilder();
        DOMSource domSource = new DOMSource(document);
        StreamResult result = new StreamResult(writer);
        TransformerFactory tf = TransformerFactory.newInstance();
        Transformer transformer = tf.newTransformer();
        return writer.toString();

但这对我不起作用。我想将我的文件在数据库中保存为 CLOB。它是 SQL 数据库。有什么办法吗?如何保存我的文件。

【问题讨论】:

  • 什么不起作用?你要写入数据库的代码是什么?
  • 线程“主”java.lang.OutOfMemoryError 中的异常:Java 堆空间。我想,我需要这样 -Xmx1024m。
  • 当你使用 DOM 时,整个 XML 将被读入你的内存,一旦达到最大值就会抛出这个异常。 CLOB 是必需的吗? Insead 你可以使用 BLOB 或 bytea(如果你使用 postgresql)
  • 感谢您的回答。我需要找到另一种方法来做到这一点。由于旧数据,我无法转换为 Blob。
  • 不要使用 DOM,而是使用 stax 或 sax。看看here

标签: java sql xml document clob


【解决方案1】:

如果您使用的是PreparedStatement(您应该是...),您可以使用setClob 方法。

// assuming document is a File, or a string containing a filename
st.setClob(index, new FileReader(document));

如果document 不是File,那么如果您可以将其作为InputStream 打开,则可以改用InputStreamReader

【讨论】:

    【解决方案2】:

    没有必要将大文件加载到您的应用程序中,只是为了将其写入数据库。让 RDBMS 直接执行此操作(这也更快...)

    您没有说明您的 RDBMS,只是“SQL 数据库”...

    如果是 SQL Server,这样的代码应该可以帮助您:

    DECLARE @yourXML XML=
    (
    SELECT CONVERT(XML, BulkColumn,2)
    FROM OPENROWSET(BULK 'PathToXmlFile.xml', SINGLE_BLOB) AS x
    );
    SELECT @yourXML;
    --And if you really need it as text (=your CLOB) you just convert it once again:
    SELECT CONVERT(VARCHAR(MAX),@yourXML) AS YourText
    

    您可以围绕它创建一个存储过程并从您的应用程序中调用它。

    【讨论】:

      猜你喜欢
      • 2021-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-19
      • 1970-01-01
      相关资源
      最近更新 更多