java 解析超大xml文件同时要保存到数据库中有哪些方法比较快?

这个xml文件有60M左右

我试着用了下SAX,直接解析出来倒是挺快的,只用了72秒,

但当我解析出来的同时插入数据库中时,就慢了好多,算起来要5个多小时

你们谁有什么比较快的方法么?

4个回答

可以先把数据全部都先解析出来然后放入缓存当中,然后一次性入库,这样可以减少与数据库的交互次数,可以加快速度

楼主解决了@我一下哈 也学习一下 谢谢了

可以保存为json格式,这样空间小

首先,超大XML的解析,应该使用SAX解析工具,可以边读取边解析,优与DOM4j全部载入内存后转换为文档树。
其次,就是分析你的xml格式,按标签解析各个属性的值可以封装成Java对象,达到一定量后执行批量SQL完成插入。

wojiushiwo945you
毕小宝 入库的操作不要一条一条的入,要批量一次1000条或者500,减少数据库连接获取的次数。这是提高效率的关键、
接近 3 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
java解析xml文档并保存到数据库
java解析xml文档并保存到数据库: sadf 说明:用xml文档简单写一份新闻如下: 洛阳未来一周将持续高温天气 中国气象局 洛阳未来一周将持续高温天气,局部地区温度高达39度!请大家做好防范高温,谨防中暑! 河南科技大学跻身世界顶尖大学 中国教育网 据权威机构综合测评之后,河南科技大学全世界排名超前,成功跻身世界顶尖大学! 洛阳牡丹甲天下 中国旅游网 洛阳牡丹甲不是
解析xml文件中图片,保存到数据库中
现有xml文件,里边包含二进制图片数据,利用pb9怎样读取出该内容保存到数据库。
JAVA 分段保存到数据库
/** * 统一将数据分段保存到数据库 * @param commParams * @param result * @param listM 要插入的结果集 * @param mapsKey 数据库批量插入的键 * @param bexKey * @param errCode * @param errMsg *
Java 图片保存到数据库
开发工具与关键技术:MyEclipse 10/Java 作者:吴永旗 撰写时间: 2019年06月17日 本实例要实现的是上传图片同时带有字段保存到数据库,首先我们需要引入commons-io-2.5.jar和commons-fileupload-1.3.2.jar包,其次最为重要的是中jsp页面的表单中from务必要有这两个属性为method="post"和 enctype="multi...
JAVA OBJECT 保存到指定的XML文件中
把JAVA对象保存到XML文件中,已经读取,其中所有对象放在一个MAP中,
dbgrid、edit同时保存到数据库
界面上有一个edit,一个dbgrid,一个button,当然数据库连接什么的都做好的rn现在是这样的,当我打个这个界面的时候,在edit上输入单号,在dbgrid上输入对应的货品信息,点保存时想把这些保存存的数据库里,如果我输入的货品信息有10条,则数据库会有10条记录,每条记录都会有一个单号,单号就是edit上的值,代码如下rnprocedure TForm1.Button3Click(Sender: TObject);rnbeginrndbgrid1.DataSource.DataSet.First;rnwhile not dbgrid1.DataSource.DataSet.Eof dornbeginrnwith adoquery1 dornbeginrnclose;rnsql.Clear;rnsql.Add('insert into table1 (CE001,CE002,CE003,CE004) values (');rnsql.Add(''''+edit1.Text+''',');rnsql.Add(''''+dbgrid1.DataSource.DataSet.fieldbyname('CE002').Text+''',');rnsql.Add(''''+dbgrid1.DataSource.DataSet.fieldbyname('CE003').Text+''',');rnsql.Add(''''+dbgrid1.DataSource.DataSet.fieldbyname('CE004').Text+''')');rnexecsql;rnend;rndbgrid1.DataSource.DataSet.Next;rnend;rnend;rn运行后点保存提示'adoquery1:field 'CE002' not found'rn但我查询的时候是有CE002这列的,请问是什么问题,谢谢!
java解析xml文件方法
对xml数据的解析,在网络程序中经常会用到。在这里介绍SAX方法来处理xml文档。SAX是基于事件的,由回调机制实现。 在这里需要解析的文件mp3.xml [code="java"] 0001 Fayray-I Wanna Be Free.mp3 4867102 Fayray-I Wanna Be Free.lrc 1453 ...
Java解析xml文件的方法
什么是 XML? XML指可扩展标记语言(EXtensible Markup Language)XML 是一种标记语言,很类似 HTMLXML 的设计宗旨是传输数据,而非显示数据XML 标签没有被预定义。您需要自行定义标签。XML 被设计为具有自我描述性。XML 是 W3C 的推荐标准XML 与 HTML 的主要差异XML 不是 HTML 的替代。 XML 和 HTML 为不同的目的而
SAX解析超大XML文件 示例代码
SAX解析超大XML文件 示例代码 SAX解析超大XML文件 示例代码 SAX解析超大XML文件 示例代码
richTextBox.Text保存到Xml文件的问题!!!
我知道怎么把richTextBox.Text保存到xml文件。rnrn但请问大家怎样才能把richTextBox.Text的格式也保存进去啊。rnrn比如richTextBox中的颜色设置,richTextBox有些字是红色的,有些是兰色。rnrn请问怎么才能把这些格式也保存到XML文件啊!!!
clob保存到xml文件中
大家好rnsrc CLOB;rnsrc := dbms_xmlgen.getXML('SELECT * FROM ze_file where rownum<=2');rn我想把src写到一个xml文件中,怎么实现?
VB解析XML并保存到数据库
如何将如下XML解析并保存到数据库,rnrn对于节点数量,节点名称相同的,已经成功解析rnrn但是对于节点数量不同,节点名称不同的,弄几天没弄好,折磨死了rnrn希望哪位高手帮个忙,指点下思路,如果能给段代码说明一下,那就更好rnrnrn下面只是示例,实际情况比这个复杂得多rnrn[code=XML]rnrn rn rn 0.00rn 0.00rn 2011-04-15 09:05:46rn 0rn 8.00rn 18.00rn rn rn 0.00rn CREATEDrn 2011-04-12 21:06:37rn 0.00rn 2011-04-12 21:09:59rn 6rn 9744091481rn rn rn[/code]rnrnrn
保存到本地的方法
ios本地保存的方法(两种)
文件上传下载保存到数据库
相当全面的javaweb上传下载,将路径保存到数据库,并且控制保存路径的大小,下边是实现的需求。 1.上传所到的目录要控制目录的大小。缺省控制在1G左右。当达到1G的大小后,不让设备再上传,并出告警。 2 日志文件缺省保存7天,过期的文件要进行删除。 3 界面上可以查看相应的日志文件,并支持删除、下载等操作。 4 SDK上传的文件名格式为zip文件,文件命名硬件平台_操作系统_6位随机数_时间戳.zip,时间戳格式yyyymmddhhmmss。
解析Json保存到数据库
NULL 博文链接:https://cici9898-007.iteye.com/blog/1930915
特殊字符保存到数据库
我现在有个字符▶ 需要保存到oracle数据库中 但是每次保存进去都乱码。rn求解决的办法。
TMemoryStream保存到数据库
初次接触到TMemoryStream,不知道能不能用它将一个复杂的类对象保存到数据库。保存代码如下:rnprocedure TprystoSBF_MainForm.SaveDateToDB();rnvarrn I: Integer;rn SBFModel,sb: TprystoSBF;rn MStream: TMemoryStream;rnbeginrn for I := 0 to TreeListML.Count - 1 dorn beginrn SBFModel := TprystoSBF(TreeListML.Items[I].Data); //TreeListML是一个类似treeview的类对象,SBFModel属于rn 定义的一种比较复杂的类,包含好多内容和数据行rn ADOTable3.Open;rn ADOTable3.Append;rn ADOTable3.FieldByName('ID').AsString := '001';rn ADOTable3.FieldByName('XH').AsInteger := I+1;rnrn MStream := TMemoryStream.Create();rn SBFModel.SaveToDFMStream(MStream);rn MStream.Position := 0;rn TBlobField(ADOTable3.FieldByName('SHSJ')).LoadFromStream(MStream); //调试显示MStream=()rn ADOTable3.Post;rn MStream.Free();rn end;rnend;rnrn等以后再取出来,怎么也是空的,没有数据,数据库读取的代码是:rn for I := 0 to ADOTable3.RecordCount - 1 dorn beginrn MStream := TMemoryStream.Create();rn TBlobField(ADOTable3.FieldByName('SHSJ')).SaveToStream(MStream);rn MStream.Position := 0;rn SBFModel := TprystoSBF.Create();rn SBFModel.LoadFromDFMStream(MStream);rn MStream.Free();rn end;rn不知道是保存有问题还是读取有错误,还是不能将TprystoSBF这种复杂的类保存到TMemoryStream在保存到数据库啊?急急!
字体保存到数据库
我怎么将Memo中的字体保存到数据库中?rnrn我想以后从数据库中取出保存的数据时它是原先设置时的样子.rn
图片保存到数据库
好用的图片保存到数据库!
log保存到数据库
http://nhy520.iteye.com/blog/482993
fastreport.net保存到数据库
这次的项目由于涉及到了打印输出,这样也就不得不要涉及一些打印预览功能,本来可以使用CrystalReport,但又通过别人介绍发现了一款制作更加精美,而且实用的FastReport控件,下面把项目中的小应用说道说道。   首先,从官方网站可以下载到FastReport最新版本,安装时注意勾选"将FastReport控件添加到VisualStudio工具箱",安装完成后就可以看到控件列表了:  
CKeditor保存到数据库
CKeditor保存到数据库是保存的源码,还是保存的是编辑的文本了?怎么获取应当保存的内容,对于图片的编辑,保存的是什么了?直接保存源码(就是点击源码显示的HTLM)到数据库么?求,获取保存的方法。
DataGridView保存到 数据库
Dim oledb1 As New OleDbConnectionrn Dim oledataset1 As New DataSetrn oledb1.ConnectionString = "provider=microsoft.jet.oledb.4.0;data source='用户管理1.mdb'" '打开当前数据库的方法 即debug目录下rn oledb1.Open()rn If ConnectionState.Open Thenrn ' Dim oledataadapter1 As OleDbDataAdapter = New OleDbDataAdapter("select ID,姓名,密码 from 表2 WHERE 姓名='" + Me.TextBox3.Text + "'", oledb1)rnrn Dim oledataadapter1 As OleDbDataAdapter = New OleDbDataAdapter("select ID,姓名,密码,特征1,特征2 from 表2 WHERE 姓名= '" + Me.TextBox3.Text + "'and 特征1='" + Me.TextBox4.Text + "'", oledb1)rn oledataadapter1.Fill(oledataset1, "表2")rn DataGridView1.DataSource = oledataset1.Tables("表2")rn oledb1.Close()rn End Ifrnrn功能实验rn以上是条件查询的语句rn我想实现这一功能rn在DataGridView我任意编辑数据,编辑后点击一个保存按钮,那么所有单元格的改变都写入数据库,rn能否给详细源码,这个保存按钮的源码,详注 详注,详注 详注,详注 详注,详注 详注,详注 详注
base64保存到数据库
我用的是hibernate建表,一个附件对象,里面有一个base64字段,写上一下columnDefinition = &quot;TEXT&quot;注解即可,数据库对应字段为text ,保存base64出错的同学们可以参考一下 @Basic(fetch = FetchType.LAZY) @Column(name = &quot;base64&quot;, columnDefinition = &quot;TEXT&quot;) privat...
C#保存到数据库
我用datatable保存了修改后的表信息,怎么才能让他保存到数据库,用devexpress控件gridview做的
大文件保存到数据库
大文件(可到100M)如何保存到sqlserver数据库?是使用image类型字段直接保存的数据库,还是只保存路径,如果只保存路径,数据文件又如何提交到服务器?
图片保存到数据库的方法.doc
图片保存到数据库的方法.doc图片保存到数据库的方法.doc
java之XML文件的解析方法Dom4j
XML文件 XML文件中的存储数据党需要被程序传输并使用的时候,因为XML语法是有别于其它语言的语法的,因此我们需要根据别的语言规则来将XML文件进行解析,我们把这个过程称之为XML数据的解析 XML文件的优点:XML相对于各种语言,它的定义都是一致的,解析的逻辑也是一致的,因此常常被用来进行各个语言之间的数据传递 XML文件的解析方式主要有三种:1.DOM解析 2.SAX解析 3.Dom4j
java解析超大xml并插入数据库
各位你们好,小弟今年刚毕业,学习java不久,到一家小公司上班,boss给我的任务是从xml文件中解析出表名、字段名、以及字段的值,把他插入到mysql相同的表中去,他设计的表呢有个问题,(1)数据库表中字段比我解析的字段多,有些字段我这个xml没有,这好说,不插入就行了,(2)字段比我解析出来的字段少,这就麻烦了,我如何插入数据库呢?哦我用的是jdbc xml文件目前是40M ,过几天可能会有更大,mysql的表示200多个, 介于问题二 苦恼了好几天不会解决求大神帮忙。再次谢过,我积分不多希望别介意 rnxml部分信息 rn[code=xml]rn rn rn rn 乐平市供电公司 rn 1 rn 2031647 rn rn rn rn 110 rn 110.000000 rn 0.000000 rn 132.000000 rn 305.000000 rn rn rn 饶丰变 rn 饶丰变 rn rn 2031647 rn rn rn rn rn 马302过流II段 rn rn rn rn rn rn 0.000000 rn 0.000000 rn 茶山变_10kV天鹅一路线线电压BC相 rn rn rn rn rn rnrn[/code]rn就以第一个节点为例吧,SubControlArea是表名,ID、name、areaNo、recordApp、resource是字段。 rnrnjava代码(我现在能解析出表名,字段不会弄,会的话给我说下谢谢) rn[code=java]rn/* rn* To change this template, choose Tools | Templates rn* and open the template in the editor. rn*/ rnpackage ly.pconline.com.cn.utils.xml.dom4j; rnrnimport java.io.File; rnimport java.io.FileInputStream; rnimport java.io.IOException; rnimport java.io.InputStream; rnimport java.util.Iterator; rnimport java.util.List; rnimport org.dom4j.Document; rnimport org.dom4j.Element; rnimport org.dom4j.ElementHandler; rnimport org.dom4j.ElementPath; rnimport org.dom4j.io.SAXReader; rnrn/** rn* rn* @author liyong rn*/ rnpublic class XindexReader1 rnrn public static int flag = 0; rnrn public static void main(String[] args) rn XindexReader1 x = new XindexReader1(); rn// x.parseXml(); rn x.parseXml2(); rn rnrn public void parseXml() rn SAXReader saxReader = new SAXReader(); rn InputStream in = null; rnrn try rn File file = new File("E:\\work123.xml"); rn in = new FileInputStream(file); rn ElementHandler myHandler = new ElementHandler() rn @Override rn public void onStart(ElementPath ep) rn// System.out.println("www"); rn rnrn @Override rn public void onEnd(ElementPath ep) rn Element element = ep.getCurrent(); // 获得当前节点 rn String en = element.getName(); rn System.out.println(en); rn rn ; rn saxReader.addHandler("/RDF", myHandler); rn saxReader.addHandler("/RDF/Substation", myHandler); rn// saxReader.resetHandlers(); rn saxReader.read(in); rn catch (Exception e) rn e.printStackTrace(); rn finally rn if (in != null) rn try rn in.close(); rn catch (IOException e) rn e.printStackTrace(); rn rn rn rn rnrn public void parseXml2() rn SAXReader saxReader = new SAXReader(); rn InputStream in = null; rn try rn File file = new File("E:\\work123.xml"); rn in = new FileInputStream(file); rn Document doc = saxReader.read(in); rn List modelList = doc.selectNodes("//RDF");//以每个model划分 rn Iterator its = modelList.iterator(); rn int i = 0; rn while (its.hasNext()) rn Element element = (Element) its.next(); rn Iterator it = element.elementIterator(); rn while (it.hasNext()) rn Element et = (Element) it.next(); rn String key = et.getName(); rn i++; rn System.out.println(key + ":" + i); rn rnrnrn rn catch (Exception e) rn e.printStackTrace(); rn finally rn if (in != null) rn try rn in.close(); rn catch (IOException e) rn rn rn rnrn rn rn[/code]rnrn哦,我大概说下我的苦恼吧,xml解析出来应该是一表为单位,然后从mysl中的表信息去核对,把我解析多的字段去除,然后插入进去。不知道我的思路可否正确 ,哦同时boss设计的表其中的字段是不允许我随意修改的
Java 保存到MongoDb的文档的几种方法
    MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,是类似 json的bjson格式,因此可以存储比较复杂的数据类型。      import java.net.UnknownHostException; import java.util.HashMap; import java.util.Map...
java实现多文件上传并保存到数据库
好久没有写博客了,今天项目里需要一个功能,即前台实现多图片上传列表,并后台保存到mysql中。前台后台一起弄,用了半天时间终于搞定了。 实现:前台Layui实现;后台servlet+hibernate 不多废话,先上图 前台实现主要是用的layui框架,框架本身提供多文件上传列表,但是没有查看的功能,我自己实现了图片查看的功能,核心代码如下: &amp;lt;div class=&quot;lay...
java将数据库内容保存到数组
上同! 如何将数据库里的一行和 一列数据保存到数组里! 或某个字段rn方便我显示到表格上. rnrn或有别的方法 请高手详说! 感谢!rn
java生成word附件保存到数据库
1.现在有一个模板要将界面的值自动添加到这个模板中的功能怎么做啊?想找大家帮忙下。rn2.只能在后台操作不能弹出界面什么的纯java代码操作。然后自动保存到数据库中。rn3.在网上也找了一下http://developer.51cto.com/art/201106/270815_all.htm 一直行不通。rn或者有没有人给我一个demo能够运行的谢谢了。
java 中图像保存到数据库
java 中图像保存到数据库和从数据库读出保存至BMP文件
java 导入 Excel表格并保存到数据库
导入Excel表,并解析数据录入数据库,Excel表一个sheet或者多个sheet均可使用 controller类的导入接口 /** * 解析Excel表数据并保存 * @param request * @param response * @throws Exception */ @RequestMapping(value=&quot;imp...
java 大文件以二进制保存到数据库
一、创建表 oracle: create table baoxiandan ( id number(20) not null, fileName varchar2(200) not null, content blob, primary key(id) ); create sequence seq_baoxiandan; 二、Hibernate映射文件...
java中将图片保存到数据库中
http://www.cnblogs.com/panjun-Donet/articles/1167585.html
java 生成 word 保存到 oracle 数据库
请问大家如何将一大段字符生成word文档并以二进制的方式存入oracle数据库,需要时再从oracle数据库中读出并以word方式展示,非常感谢!
Pypy 确实比较快
centos 安装命令 yum -y install pypy-libs pypy pypy-devel 装好了以后测试了一下,用下面这段代码import time def check(num): a = list(str(num)) b = a[::-1] if a == b: return True return False
三种数据存放方法哪种比较快?
写一个中文分词算法的时候用到了一个几十M的字典文件,当搜索某个词的时候下面我试了三种方法,结果跟我开始想的有点不同.rnrn字典文件的格式是: 词汇 词频rnrn方法一:用输入输出流每次都读取字典文件rnrn方法二:把字典以结构体数组的方式保存在内存中,搜索的时候遍历结构体数组rnrn方法三:用容器map保存,用map自带的方法遍历rnrn大家说说哪个比较快
相关热词 c# 标准差 计算 c#siki第五季 c#入门推荐书 c# 解码海康数据流 c# xml的遍历循环 c# 取 查看源码没有的 c#解决高并发 委托 c#日期转化为字符串 c# 显示问号 c# 字典对象池