读.dat文件,写入数据库的问题. 现在在做读取*.dat文件里的数据,并把数据插入到数据库中.问题是现在每导入8万条左右就出问题.所以想把这个文件的记录分开导入.比如一次导5万条,但是不知道该怎么写.我导5万后想断开一下再重新导,但是是要从5万零1开始.大家帮个忙吧.多谢了! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 应该没问题把我100万的数据50M的文件都度过你可以用批量读取然后插入-------------------------先获得总行数然后分段你5万一读的话然后用for循环for(int i=1;i《总行数/50000;i++){ 跳到指定行,然后进行下面操作 for(int j=(i-1)*50000+1;j<i*50000;j++){ }}再执行剩余的上面写的有点乱基本这个意思 for(int i=1;i《=总行数/50000;i++){ 跳到指定行,然后进行下面操作 for(int j=(i-1)*50000+1;j <i*50000;j++){ } } 指针跳到50000*(--i)剩余行数=总行数-50000*(i)继续执行-------------------第二种方法貌似效率不高还是第一种好如果用第二种的话,可以用多线程来操作各自50000条数据 文件总共估计多大?什么数据库?一般大中型数据库都有导入工具的,如果不存在特殊数据处理,建议还是用数据库工具吧。如果用程序.dat文件不知道你是readLine(String)还是read byte的方式。前者的话,直接记录行数,后者的话,记录当前已读完的字节总数。插入时,采用PreparedStatement的executeBatch,大约1000至10000条提交一次。提交完成后记录当前已提交的上述已读行数or字节数到文件(写内存怕突然程序异常死掉)。我做过2KW数据量的读字节文件导入,以上方法没问题。 DB2数据库,方文件大小在3MB左右吧,大概20W条以内.readLing(String) 的方式.采用PreparedStatement的executeBatch,大约1000至10000条提交一次。提交完成后记录当前已提交的上述已读行数or字节数到文件(写内存怕突然程序异常死掉)。 能给写的点代码吗?新手,拜托了!谢谢大家了。 可以每次读取一行,如果数据是按行写入的。while(i<50000)设计一个静态变量把i。或设计一个文件标记。下次从标记加 1 开始读取。 四、不健壮代码的特征及解决办法 1、尽早释放无用对象的引用。好的办法是使用临时变量的时候,让引用变量在退出活动域后,自动设置为null,暗示垃圾收集器来收集该 对象,防止发生内存泄露。对于仍然有指针指向的实例,jvm就不会回收该资源,因为垃圾回收会将值为null的对象作为垃圾,提高GC回收机制效率; 2、我们的程序里不可避免大量使用字符串处理,避免使用String,应大量使用StringBuffer,每一个String对象都得独立占用内存一块区域;例如 3、尽量少用静态变量,因为静态变量是全局的,GC不会回收的; 4、避免集中创建对象尤其是大对象,JVM会突然需要大量内存,这时必然会触发GC优化系统内存环境;显示的声明数组空间,而且申请数量还极大。 5、尽量运用对象池技术以提高系统性能;生命周期长的对象拥有生命周期短的对象时容易引发内存泄漏,例如大集合对象拥有大数据量的业务对象的时候,可以考虑分块进行处理,然后解决一块释放一块的策略。 6、不要在经常调用的方法中创建对象,尤其是忌讳在循环中创建对象。可以适当的使用hashtable,vector 创建一组对象容器,然后从容器中去取那些对象,而不用每次new之后又丢弃 7、一般都是发生在开启大型文件或跟数据库一次拿了太多的数据,造成 Out Of Memory Error 的状况,这时就大概要计算一下数据量的最大值是多少,并且设定所需最小及最大的内存空间值。 用Scanner src = new Scanner(new FileReader("Test.txt"));然后for循环调用src.nextLine(),移动到指定行数。貌似没有直接移动到指定行的方法。以前我readbyte也是这么做的。while循环,读过的不再处理,直接skip到指定byte位。不知道现在1.6有没有这个方法。 JVMST109: Insufficient space in Javaheap to satisfy allocation requestJVMST109: Insufficient space in Javaheap to satisfy allocation requestJVMDG217: Dump Handler is Processing OutOfMemory - Please Wait.JVMDG315: JVM Requesting Heap dump file..................................................JVMDG318: Heap dump file written to D:\WebSphere\AppServer\bin\heapdump.20091228.203708.1684.phdJVMDG303: JVM Requesting Java core fileJVMDG304: Java core file written to D:\WebSphere\AppServer\bin\javacore.20091228.203726.1684.txtJVMDG274: Dump Handler has Processed OutOfMemory.JVMST109: Insufficient space in Javaheap to satisfy allocation requestJVMDG217: Dump Handler is Processing OutOfMemory - Please Wait.JVMDG315: JVM Requesting Heap dump file 噢,那就把JVM内存调大点吧。不过这是治标不治本噢。 代码方面?你把文件整个load到内存了呗 servlet提取到的list传到JSP方法 mysql 优化批量插入 在超级连接上面有提示怎么写 求救 该怎么做???? 如何使用jsp的标签在网页分页?急要代码!!!! 求解,访问服务器时,在客户端上java画板调不出来 高手门用什么开发工具写jsp啊? 说说你们的jsp武器.谢谢. jbuilder太慢了. 菜鸟学习JSP第二题,下载JBuilder却新建不了JSP文件? 100分求购Struts,MVC学习程序 Ultra Edit编辑的js文件对齐方式问题 jsp读取文本文件:文件内容有规则
我100万的数据50M的文件都度过
你可以用批量读取然后插入
-------------------------
先获得总行数
然后分段
你5万一读的话
然后用for循环
for(int i=1;i《总行数/50000;i++){
跳到指定行,然后进行下面操作
for(int j=(i-1)*50000+1;j<i*50000;j++){
}
}
再执行剩余的
上面写的有点乱
基本这个意思
跳到指定行,然后进行下面操作
for(int j=(i-1)*50000+1;j <i*50000;j++){
}
}
指针跳到50000*(--i)
剩余行数=总行数-50000*(i)
继续执行
-------------------
第二种方法貌似效率不高
还是第一种好
如果用第二种的话,可以用多线程来操作各自50000条数据
一般大中型数据库都有导入工具的,如果不存在特殊数据处理,建议还是用数据库工具吧。如果用程序
.dat文件不知道你是readLine(String)还是read byte的方式。前者的话,直接记录行数,后者的话,记录当前已读完的字节总数。
插入时,采用PreparedStatement的executeBatch,大约1000至10000条提交一次。提交完成后记录当前已提交的上述已读行数or字节数到文件(写内存怕突然程序异常死掉)。
我做过2KW数据量的读字节文件导入,以上方法没问题。
readLing(String) 的方式.采用PreparedStatement的executeBatch,大约1000至10000条提交一次。提交完成后记录当前已提交的上述已读行数or字节数到文件(写内存怕突然程序异常死掉)。 能给写的点代码吗?新手,拜托了!谢谢大家了。
设计一个静态变量把i。或设计一个文件标记。下次从标记加 1 开始读取。
1、尽早释放无用对象的引用。好的办法是使用临时变量的时候,让引用变量在退出活动域后,自动设置为null,暗示垃圾收集器来收集该 对象,防止发生内存泄露。对于仍然有指针指向的实例,jvm就不会回收该资源,因为垃圾回收会将值为null的对象作为垃圾,提高GC回收机制效率;
2、我们的程序里不可避免大量使用字符串处理,避免使用String,应大量使用StringBuffer,每一个String对象都得独立占用内存一块区域;例如
3、尽量少用静态变量,因为静态变量是全局的,GC不会回收的;
4、避免集中创建对象尤其是大对象,JVM会突然需要大量内存,这时必然会触发GC优化系统内存环境;显示的声明数组空间,而且申请数量还极大。
5、尽量运用对象池技术以提高系统性能;生命周期长的对象拥有生命周期短的对象时容易引发内存泄漏,例如大集合对象拥有大数据量的业务对象的时候,可以考虑分块进行处理,然后解决一块释放一块的策略。
6、不要在经常调用的方法中创建对象,尤其是忌讳在循环中创建对象。可以适当的使用hashtable,vector 创建一组对象容器,然后从容器中去取那些对象,而不用每次new之后又丢弃
7、一般都是发生在开启大型文件或跟数据库一次拿了太多的数据,造成 Out Of Memory Error 的状况,这时就大概要计算一下数据量的最大值是多少,并且设定所需最小及最大的内存空间值。
用
Scanner src = new Scanner(new FileReader("Test.txt"));
然后for循环调用src.nextLine(),移动到指定行数。貌似没有直接移动到指定行的方法。
以前我readbyte也是这么做的。while循环,读过的不再处理,直接skip到指定byte位。
不知道现在1.6有没有这个方法。
JVMST109: Insufficient space in Javaheap to satisfy allocation request
JVMDG217: Dump Handler is Processing OutOfMemory - Please Wait.
JVMDG315: JVM Requesting Heap dump file
..................................................JVMDG318: Heap dump file written to D:\WebSphere\AppServer\bin\heapdump.20091228.203708.1684.phd
JVMDG303: JVM Requesting Java core file
JVMDG304: Java core file written to D:\WebSphere\AppServer\bin\javacore.20091228.203726.1684.txt
JVMDG274: Dump Handler has Processed OutOfMemory.
JVMST109: Insufficient space in Javaheap to satisfy allocation request
JVMDG217: Dump Handler is Processing OutOfMemory - Please Wait.
JVMDG315: JVM Requesting Heap dump file