社区
Web 开发
帖子详情
读.dat文件,写入数据库的问题.
lvjx125
2009-12-25 10:46:34
现在在做读取*.dat文件里的数据,并把数据插入到数据库中.问题是现在每导入8万条左右就出问题.
所以想把这个文件的记录分开导入.比如一次导5万条,但是不知道该怎么写.
我导5万后想断开一下再重新导,但是是要从5万零1开始.大家帮个忙吧.多谢了!
...全文
513
19
打赏
收藏
读.dat文件,写入数据库的问题.
现在在做读取*.dat文件里的数据,并把数据插入到数据库中.问题是现在每导入8万条左右就出问题. 所以想把这个文件的记录分开导入.比如一次导5万条,但是不知道该怎么写. 我导5万后想断开一下再重新导,但是是要从5万零1开始.大家帮个忙吧.多谢了!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
19 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
lvjx125
2010-01-05
打赏
举报
回复
问题没有解决,但是要谢谢大家的支持。
lvjx125
2009-12-29
打赏
举报
回复
我才不到20W的数据,导入到10几W的时候就内存溢出了。郁闷啊
crazylaa
2009-12-29
打赏
举报
回复
代码方面?你把文件整个load到内存了呗。。。
lvjx125
2009-12-29
打赏
举报
回复
[Quote=引用 16 楼 crazylaa 的回复:]
引用 14 楼 lvjx125 的回复:
我才不到20W的数据,导入到10几W的时候就内存溢出了。郁闷啊
噢,那就把JVM内存调大点吧。不过这是治标不治本噢。
[/Quote]
就是啊。能不能帮我分析一下都什么情况会出现这种问题。(代码方面)
crazylaa
2009-12-29
打赏
举报
回复
[Quote=引用 14 楼 lvjx125 的回复:]
我才不到20W的数据,导入到10几W的时候就内存溢出了。郁闷啊
[/Quote]
噢,那就把JVM内存调大点吧。不过这是治标不治本噢。
lvjx125
2009-12-29
打赏
举报
回复
JVMST109: Insufficient space in Javaheap to satisfy allocation request
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
crazylaa
2009-12-28
打赏
举报
回复
[Quote=引用 7 楼 lvjx125 的回复:]
求一段能把文件,分成多个的代码。每5万做成一个新文件
[/Quote]
用
Scanner src = new Scanner(new FileReader("Test.txt"));
然后for循环调用src.nextLine(),移动到指定行数。貌似没有直接移动到指定行的方法。
以前我readbyte也是这么做的。while循环,读过的不再处理,直接skip到指定byte位。
不知道现在1.6有没有这个方法。
zl3450341
2009-12-28
打赏
举报
回复
[Quote=引用 4 楼 crazylaa 的回复:]
文件总共估计多大?什么数据库?
一般大中型数据库都有导入工具的,如果不存在特殊数据处理,建议还是用数据库工具吧。
如果用程序
.dat文件不知道你是readLine(String)还是read byte的方式。前者的话,直接记录行数,后者的话,记录当前已读完的字节总数。
插入时,采用PreparedStatement的executeBatch,大约1000至10000条提交一次。提交完成后记录当前已提交的上述已读行数or字节数到文件(写内存怕突然程序异常死掉)。
我做过2KW数据量的读字节文件导入,以上方法没问题。
[/Quote]
.~
crazylaa
2009-12-28
打赏
举报
回复
[Quote=引用 10 楼 lvjx125 的回复:]
四、不健壮代码的特征及解决办法
1、尽早释放无用对象的引用。好的办法是使用临时变量的时候,让引用变量在退出活动域后,自动设置为null,暗示垃圾收集器来收集该 对象,防止发生内存泄露。对于仍然有指针指向的实例,jvm就不会回收该资源,因为垃圾回收会将值为null的对象作为垃圾,提高GC回收机制效率;
2、我们的程序里不可避免大量使用字符串处理,避免使用String,应大量使用StringBuffer,每一个String对象都得独立占用内存一块区域;例如
3、尽量少用静态变量,因为静态变量是全局的,GC不会回收的;
4、避免集中创建对象尤其是大对象,JVM会突然需要大量内存,这时必然会触发GC优化系统内存环境;显示的声明数组空间,而且申请数量还极大。
5、尽量运用对象池技术以提高系统性能;生命周期长的对象拥有生命周期短的对象时容易引发内存泄漏,例如大集合对象拥有大数据量的业务对象的时候,可以考虑分块进行处理,然后解决一块释放一块的策略。
6、不要在经常调用的方法中创建对象,尤其是忌讳在循环中创建对象。可以适当的使用hashtable,vector 创建一组对象容器,然后从容器中去取那些对象,而不用每次new之后又丢弃
7、一般都是发生在开启大型文件或跟数据库一次拿了太多的数据,造成 Out Of Memory Error 的状况,这时就大概要计算一下数据量的最大值是多少,并且设定所需最小及最大的内存空间值。
[/Quote]
嗯嗯,不错,总结得很好啊。
lvjx125
2009-12-28
打赏
举报
回复
四、不健壮代码的特征及解决办法
1、尽早释放无用对象的引用。好的办法是使用临时变量的时候,让引用变量在退出活动域后,自动设置为null,暗示垃圾收集器来收集该 对象,防止发生内存泄露。对于仍然有指针指向的实例,jvm就不会回收该资源,因为垃圾回收会将值为null的对象作为垃圾,提高GC回收机制效率;
2、我们的程序里不可避免大量使用字符串处理,避免使用String,应大量使用StringBuffer,每一个String对象都得独立占用内存一块区域;例如
3、尽量少用静态变量,因为静态变量是全局的,GC不会回收的;
4、避免集中创建对象尤其是大对象,JVM会突然需要大量内存,这时必然会触发GC优化系统内存环境;显示的声明数组空间,而且申请数量还极大。
5、尽量运用对象池技术以提高系统性能;生命周期长的对象拥有生命周期短的对象时容易引发内存泄漏,例如大集合对象拥有大数据量的业务对象的时候,可以考虑分块进行处理,然后解决一块释放一块的策略。
6、不要在经常调用的方法中创建对象,尤其是忌讳在循环中创建对象。可以适当的使用hashtable,vector 创建一组对象容器,然后从容器中去取那些对象,而不用每次new之后又丢弃
7、一般都是发生在开启大型文件或跟数据库一次拿了太多的数据,造成 Out Of Memory Error 的状况,这时就大概要计算一下数据量的最大值是多少,并且设定所需最小及最大的内存空间值。
JavaAlpha
2009-12-26
打赏
举报
回复
可以每次读取一行,如果数据是按行写入的。
while(i<50000)
设计一个静态变量把i。
或设计一个文件标记。
下次从标记加 1 开始读取。
lvjx125
2009-12-26
打赏
举报
回复
DB2数据库,方文件大小在3MB左右吧,大概20W条以内.
readLing(String) 的方式.
采用PreparedStatement的executeBatch,大约1000至10000条提交一次。提交完成后记录当前已提交的上述已读行数or字节数到文件(写内存怕突然程序异常死掉)。 能给写的点代码吗?新手,拜托了!谢谢大家了。
java_running
2009-12-26
打赏
举报
回复
用分页的思想去处理吧
jabeginner
2009-12-26
打赏
举报
回复
更大的数据都可以导。可能文件或者程序有点问题吧
实在不行,就按你的方法来,不过加些改进。就是导完一个删除一个,导完5w再重新开始,这样就不用担心文件起点问题。
crazylaa
2009-12-26
打赏
举报
回复
文件总共估计多大?什么数据库?
一般大中型数据库都有导入工具的,如果不存在特殊数据处理,建议还是用数据库工具吧。
如果用程序
.dat文件不知道你是readLine(String)还是read byte的方式。前者的话,直接记录行数,后者的话,记录当前已读完的字节总数。
插入时,采用PreparedStatement的executeBatch,大约1000至10000条提交一次。提交完成后记录当前已提交的上述已读行数or字节数到文件(写内存怕突然程序异常死掉)。
我做过2KW数据量的读字节文件导入,以上方法没问题。
lvjx125
2009-12-26
打赏
举报
回复
求一段能把文件,分成多个的代码。每5万做成一个新文件
laker_914
2009-12-25
打赏
举报
回复
楼上的方法可以,
sean1203
2009-12-25
打赏
举报
回复
for(int i=1;i《=总行数/50000;i++){
跳到指定行,然后进行下面操作
for(int j=(i-1)*50000+1;j <i*50000;j++){
}
}
指针跳到50000*(--i)
剩余行数=总行数-50000*(i)
继续执行
-------------------
第二种方法貌似效率不高
还是第一种好
如果用第二种的话,可以用多线程来操作各自50000条数据
sean1203
2009-12-25
打赏
举报
回复
应该没问题把
我100万的数据50M的文件都度过
你可以用批量读取然后插入
-------------------------
先获得总行数
然后分段
你5万一读的话
然后用for循环
for(int i=1;i《总行数/50000;i++){
跳到指定行,然后进行下面操作
for(int j=(i-1)*50000+1;j<i*50000;j++){
}
}
再执行剩余的
上面写的有点乱
基本这个意思。。。
VB
写入
dat
文件
测试程序
VB
文件
写入
的操作实例,
写入
的
文件
类型是
dat
,当然也可以
读
出来
Dat
文件
里的数据,自己测试的话,把
文件
路径修改下。程序运行截图如上所示,可以依次
写入
文件
。
记录访问者的ip和地理位置
1.将QQ安装目录下的QQwry.
dat
文件
复制到asp
文件
夹下 2.建立asp
文件
3.要查询ip的asp页面内加入: <!--#include file = "ip.asp"--> dim ip,ipx ip=getIP() ipx=address(ip) %> 整体
文件
说明 ip.asp 获取...
JAVA上百实例源码以及开源项目
Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到
文件
privateKey.
dat
、如何用Java对象序列化保存私钥...
java源码包---java 源码 大量 实例
Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到
文件
privateKey.
dat
、如何用Java对象序列化保存私钥...
java源码包2
Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到
文件
privateKey.
dat
、如何用Java对象序列化保存私钥...
Web 开发
81,092
社区成员
341,718
社区内容
发帖
与我相关
我的任务
Web 开发
Java Web 开发
复制链接
扫一扫
分享
社区描述
Java Web 开发
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章