有这样结构的一个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的内容解析,
执行插入和更新数据库的操作。请问高人,该怎么做?或有什么更好的办法吗?
里面的节点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的内容解析,
执行插入和更新数据库的操作。请问高人,该怎么做?或有什么更好的办法吗?
如果是java来做的话,比较简单了,可以用dom的一次性load所有的xml,或者用基于sax的边读边解析,这里根据你的xml的文件大小和你的机器的性能来决定了。下面就是插入的方式。对于插入的方式,不推荐你用procedure一次来做,不仅性能会出现危机,而且消耗也会非常到。jdbc里提供batchupdate的方式,在thin客户端batchupdate是比较好的选择,你可以根据你实际情况,通过程序来控制batchupdate一次的数量。每次batchupdate后commit。分批进行。
速度要比楼上的快。
我也是这么想的,但这并不是单纯的数组就能搞定啊。还要用到Record,
Record的一个成员还要是数组,一层一层的套,也就是要套出这个xml文件的结构。实现起来很困难啊。
至于那个插入操作,楼主可以使用循环来进行插入,用procedure本人觉得没什么必要,不就只是插入数据么
我用的oracle10g
把你的xml文件放在你的web应用部署目录下,这样web程序就可以访问了。
而且消耗高
这里对解析器的选择要谨慎一些,jdom是基于dom的,所以是一次性load到内存里进行解析的,所以这里要注意内存方面的问题。