有这样结构的一个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的内容解析,
执行插入和更新数据库的操作。请问高人,该怎么做?或有什么更好的办法吗?
解决方案 »
- 将查询出来的某个字段插入到临时表里,查完临时表要drop掉,sql语句怎么写?
- 怎样使用exp/imp从oracle9i导入到oracle8i?
- 出现错误提示:ORA-04031: 无法分配 8192 字节的共享内存 ("large pool","unknown object","cursor work he","get new buffer")
- 请问,怎样把查询结果临时保存,以供后面的SQL语句使用?
- 求一个sql语句,查一个节点所有的祖先节点
- 用oracle发邮件标题乱码的问题
- 请问在哪里能下到ORACLE 9中文版,3CD的?
- oracle中有没有优化方面的命令?
- 高手进!!!!请问Oracle的common.inc文件在哪个文件夹?
- oracle8.1.6问题!
- 不同数据库之间进行数据的导出/导入...请教!
- oracle移植
如果是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到内存里进行解析的,所以这里要注意内存方面的问题。