java 从数据库中导出大量数据 生成txt文件,内存溢出 java iojava文件生成java内存溢出 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你是要按userid的后两位写文件的,所以写个循环,分批次查询就好了啊。如果还是不行,就用rownum。 你确定你的内存是在这段代码里溢出的么?jdbc的resultset和你的操作都是流操作,正常情况下应该是不会有大量内存占用的,去分析一下你溢出的内存的占用情况吧 我刚搞了跟你差不多功能的问题,主要是你没有分页去处理,将sql语句分页处理,每10000条或者20000条记录查询一次(这个得根据你写入文件的字符串的长度,如果记录太多字符串有可能超出最大长度,你这里我觉得每次执行100000条记录都没问题),然后写入到文件中再进行下一次操作,就不会出现内存溢出的问题了 每次循环就执行writerSml.write(phoneNo+"|"+userId+"\r\n");由于数据量太大,导致内存溢出,建议分批次查询导出。 你的statement没释放,当然内存会溢出……这种文件见过好多了String sql = "SELECT PHONE_NO PHONE_NO,USER_ID USER_ID FROM "+ tableName ;Statement stmt = null; try { dbaction.getConn(); stmt = dbaction.con.createStatement(); ResultSet rs = stmt.executeQuery(sql);while (rs.next()){ .....}catch(Exception e) {}finally { if (stmt != null){ stmt.close(); } // connection,也要在这里释放,如果是连接池的,则是还回池中.// 其实所有的文件读写的close,都是最好放在finally 块中。} 这个吧,你从数据库那就得先处理。1、需求:从数据库中读取百万级的记录,(包括用户手机号、用户id)取出后按照userid后两位分(00-99)生成100不同的txt文件。----------------------先截取userid后两位 然后分组并统计一下。 看看每组有多少计录,然后再一批一批的取。 哎。。我这是从xml文件里读取数据数量级别不等的xml文件分批解析xml,再放数据库吧,怕中间有异常,文件和数据库数据不一致 用线程池,规定每次启动2个线程,其余的排队,每个线程1000条记录,等所有线程跑完毕后将所有生成txt文件打包成zip文件。 struts2中的<s:tabele></s:table>标签如何使用 struts这些框架的标签是怎么解析的? struts2下面的ValueStack问题 新号没有分 还请多多帮忙 为什么查询 没传值 却出了空指针啦 各位高手,struts2 如何解决重复提交问题。 这样两套建表方案?效率差别会有多大? Struts超级诡异的一个问题~ 请问一个系统如何统计不同类型用户且满足一定条件的在线人数?? JNDI 中有关帮定对象的问题 请教一个问题(关于接口) tomcat启动时报:WARNING 错误 'source' javaEE 对于servlet的疑问
如果还是不行,就用rownum。
这种文件见过好多了String sql = "SELECT PHONE_NO PHONE_NO,USER_ID USER_ID FROM "+ tableName ;
Statement stmt = null;
try {
dbaction.getConn();
stmt = dbaction.con.createStatement();
ResultSet rs = stmt.executeQuery(sql);
while (rs.next()){
.....
}
catch(Exception e) {
}
finally {
if (stmt != null){
stmt.close();
}
// connection,也要在这里释放,如果是连接池的,则是还回池中.
// 其实所有的文件读写的close,都是最好放在finally 块中。
}
先截取userid后两位 然后分组并统计一下。 看看每组有多少计录,然后再一批一批的取。