有这样结构的一个xml文件,
里面的节点A会有非常多,数据量很大。<Root>
  <As>
    <A>
      <No="20090906001"/>
      <RID="3434065"/>
      <CID="3434065001"/>
      <DyLoc="二龙路"/>
      <DyDate="2009-09-30"/>
      <Ls="中邮物流"/>
      <Re="备注内容 无"/>
      <SDs>
        <SD>
          <ItemNo="1"/>
          <ReNo="3420090930001"/>
          <RSOID="3420090930003"/>
          <PNo="100101"/>
      <QtyNum="2"/>
          <LsNo="FK9282911"/>
      <ICDs>
              <IBC="123123123123"/>
              <IBC="456456464647"/>
          </ICDs >
        </SD >
        <SD>
          <ItemNo="2"/>
          <ReNo="3420090930001"/>
          <RSOID="3420090930003"/>
          <PNo="100101"/>
      <QtyNum="2"/>
          <LsNo="FK9282911"/>
      <ICDs>
              <IBC="123123123123"/>
              <IBC="456456464647"/>
          </ICDs>
        </SD>
      </SDs>
    </A>
    <!------------------------------------------------------------------------------------------------------------>
    <A>
      <No="20090906002"/>
      <RID="3434065"/>
      <CID="3434065002"/>
      <DyLoc="西城区"/>
      <DyDate="2009-09-30"/>
      <Ls="中邮物流"/>
      <Re="备注内容 无"/>
      <SDs>
        <SD>
          <ItemNo="2"/>
          <ReNo="3420090930002"/>
          <RSOID="3420090930005"/>
          <PNo="100102"/>
      <QtyNum="2"/>
          <LsNo="FK9282912"/>
      <ICDs>
              <IBC="123123123124"/>
              <IBC="456456464648"/>
          </ICDs>
        </SD>
      </SDs>
    </A>
  </As>
</Root>
我现在要读取这个XML文件,
然后将其中的数据解析,插入到数据库中,
由于数据量很大,一个一个用insert速度很慢,
现在打算将此xml文件的内容用java读取,
将每个节点A组装成数据结构A,整个xml文件就是一个数据结构A的数组。
数据结构A中又包含SD数据结构的数组,一直这样下去。我现在想将拼装好的数组A当作 存储过程 的一个参数,然后在数据库中将数组A的内容解析,
执行插入和更新数据库的操作。请问高人,该怎么做?或有什么更好的办法吗?

解决方案 »

  1.   


    如果是java来做的话,比较简单了,可以用dom的一次性load所有的xml,或者用基于sax的边读边解析,这里根据你的xml的文件大小和你的机器的性能来决定了。下面就是插入的方式。对于插入的方式,不推荐你用procedure一次来做,不仅性能会出现危机,而且消耗也会非常到。jdbc里提供batchupdate的方式,在thin客户端batchupdate是比较好的选择,你可以根据你实际情况,通过程序来控制batchupdate一次的数量。每次batchupdate后commit。分批进行。
      

  2.   

    建议用存储过程处理,把JAVA里生成的数组传给存储过程,在存储过程里采用批量插入。
    速度要比楼上的快。
      

  3.   

    FYI:http://www.blogjava.net/botson/archive/2008/03/19/187360.html
      

  4.   


    我也是这么想的,但这并不是单纯的数组就能搞定啊。还要用到Record,
    Record的一个成员还要是数组,一层一层的套,也就是要套出这个xml文件的结构。实现起来很困难啊。
      

  5.   

    不建议对于插入的方式,不推荐你用procedure一次来做,因为传入存储过程的参数(如此大的一个数组)是是临时放到内存中的,如果数据是几百万条机器会崩掉的。
      

  6.   

    如果用dom技术,建议用jdom进行解析。
    至于那个插入操作,楼主可以使用循环来进行插入,用procedure本人觉得没什么必要,不就只是插入数据么
      

  7.   

    这个有用,不过我跟其他下面回复的用户一样,路径无效。
    我用的oracle10g
      

  8.   

    是否因为xml文件在客户端所以调用时无法找到,感觉应该是只能调用服务器上的文件。
      

  9.   


    把你的xml文件放在你的web应用部署目录下,这样web程序就可以访问了。
      

  10.   

    oracle 支持XML类型的对象存储,效率也很高,可以试试。
      

  11.   

    java 处理 xml 貌似没有 C# 快
    而且消耗高
      

  12.   


    这里对解析器的选择要谨慎一些,jdom是基于dom的,所以是一次性load到内存里进行解析的,所以这里要注意内存方面的问题。