关于文件读取写入等性能问题 百万数据非同小可,这样做溢出是在所难免的 建议分批write 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 做个类似批量处理的处理 while (rs.next()) { sb.append("|"); sb.append(rs.getString(1)).append("|"); sb.append(rs.getString(2)).append("|"); sb.append(rs.getString(3)).append("|"); sb.append(rs.getString(4)).append("|"); sb.append(rs.getString(5)).append("|"); sb.append(rs.getString(6)).append("|"); sb.append(rs.getString(7)).append("|"); sb.append(rs.getString(8)).append("|"); sb.append(rs.getString(9)).append("|"); sb.append(rs.getString(9)).append("|"); sb.append(rs.getString(10)).append("|"); sb.append(rs.getString(11)).append("|"); sb.append("\n"); count ++; if (count % 10000 == 0) { out.write(sb.toString()); sb.delete(0, sb.length()); } } if (count % 10000 == 0) { out.write(sb.toString()); sb.delete(0, sb.length()); }这个方法可以,不过零头取不出来了。我做了个if判断,但是还是没有取出来,可能是我的写法不对。请知道指教一二 if (count % 10000 == 0) { out.write(sb.toString()); sb.delete(0, sb.length()); out.cloase(); } else if(count<10000){ out.write(sb.toString()); sb.delete(0, sb.length()); out.cloase();} 你可以在循环完了在执行一次out.write(sb.toString()); 零头不就出来了么 while (rs.next()) { sb.append("|"); sb.append(rs.getString(1)).append("|"); sb.append(rs.getString(2)).append("|"); sb.append(rs.getString(3)).append("|"); sb.append(rs.getString(4)).append("|"); sb.append(rs.getString(5)).append("|"); sb.append(rs.getString(6)).append("|"); sb.append(rs.getString(7)).append("|"); sb.append(rs.getString(8)).append("|"); sb.append(rs.getString(9)).append("|"); sb.append(rs.getString(9)).append("|"); sb.append(rs.getString(10)).append("|"); sb.append(rs.getString(11)).append("|"); sb.append("\n"); count ++; if (count % 10000 == 0) { out.write(sb.toString()); sb.delete(0, sb.length()); } } 完整程序/** * @author dingting * @title 会计凭证信息文件 * @param out BufferedWriter * @param sdate String * @return int 0为执行不成功,1为执行成功 */ public int oneWriteData(BufferedWriter out, String sdate) { odbcConnection mySybase = new odbcConnection(); Connection conndb = null; PreparedStatement ps=null; ResultSet rs=null; int back = 0; //如果返回0为不成功,如果返回1为成功。 try { conndb = mySybase.getConnection(); conndb.setAutoCommit(false);//没执行前关闭所有链接 String readStr = "select RFDT,IOMK,CYNO,BRNO,AMCD,OTCD,ACIT,TSAM,PRID,USID,MARK from XKJ where RFDT='" +sdate + "' order by BRNO"; System.out.println("dingting:Now end to excute from bankcredit.........."); ps = conndb.prepareStatement(readStr); rs = ps.executeQuery(); StringBuffer sb = new StringBuffer(128); int count = 0; while (rs.next()) { sb.append("|"); sb.append(rs.getString(1)).append("|"); sb.append(rs.getString(2)).append("|"); sb.append(rs.getString(3)).append("|"); sb.append(rs.getString(4)).append("|"); sb.append(rs.getString(5)).append("|"); sb.append(rs.getString(6)).append("|"); sb.append(rs.getString(7)).append("|"); sb.append(rs.getString(8)).append("|"); sb.append(rs.getString(9)).append("|"); sb.append(rs.getString(9)).append("|"); sb.append(rs.getString(10)).append("|"); sb.append(rs.getString(11)).append("|"); sb.append("\n"); count++; if (count % 10000 == 0) { //每次批量插入10000条 out.write(sb.toString()); //插入文本 sb.delete(0, sb.length()); //每次先清空一次缓存 out.flush(); //要强迫写出一个输出流中的所有数据 } } if (!sb.equals("")) { back = 1; } System.out.println("dingting:Now end to excute from bankcredit.........."); out.write(sb.toString()); out.flush();//要强迫写出一个输出流中的所有数据 out.close();//要关闭一个输出流并释放所有与之相关的系统资源 } catch (Exception ex) { System.out.println(mySybase.getErrorMessage(ex,"Application error,please contact to your Software Designer!").toString()); } finally { try { if (rs != null) { rs.close(); } if (ps != null) { ps.close(); } if (conndb != null) { conndb.close(); } } catch (Exception e) { } } return back; }---------@echo offecho 正在设置环境变量,请稍等......set JAVA_HOME=\jdkset path=%JAVA_HOME%\bin;%JAVA_HOME%\lib;set CLASS_PATH=%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;echo 设置环境变量成功!!!echo dingting..............!!!java -Xms128m -Xmx256m //-----主要在这里,对jvm进行配置cd /BankMessage/classes/java -cp ".;%CLASSPATH%" tf.dt.credit.view.CreditMessageViewecho. & pause jfreeChart热点怎样在struts下实现 有了actionform还要不要建另外的bean啊 现求hibernate中多表查询语句? 请问JSP的判断语句(if;else)怎么写? hibernate3 怎样调用数据库中自己写的函数 关于XML读写 高薪诚聘会搭建环境、(节日1-2天) 关于JSP嵌入播放器的问题 如何在win98下运行jboss3.2.5??100分送 Weblogic中的连接池满了,怎么办阿? 流行的业务系统 struts2 加载异常 高手看下
while (rs.next()) {
sb.append("|");
sb.append(rs.getString(1)).append("|");
sb.append(rs.getString(2)).append("|");
sb.append(rs.getString(3)).append("|");
sb.append(rs.getString(4)).append("|");
sb.append(rs.getString(5)).append("|");
sb.append(rs.getString(6)).append("|");
sb.append(rs.getString(7)).append("|");
sb.append(rs.getString(8)).append("|");
sb.append(rs.getString(9)).append("|");
sb.append(rs.getString(9)).append("|");
sb.append(rs.getString(10)).append("|");
sb.append(rs.getString(11)).append("|");
sb.append("\n");
count ++;
if (count % 10000 == 0) {
out.write(sb.toString());
sb.delete(0, sb.length());
}
}
out.write(sb.toString());
sb.delete(0, sb.length());
}
这个方法可以,不过零头取不出来了。我做了个if判断,但是还是没有取出来,可能是我的写法不对。请知道指教一二
if (count % 10000 == 0) {
out.write(sb.toString());
sb.delete(0, sb.length());
out.cloase();
} else if(count<10000){
out.write(sb.toString());
sb.delete(0, sb.length());
out.cloase();
}
零头不就出来了么
sb.append("|");
sb.append(rs.getString(1)).append("|");
sb.append(rs.getString(2)).append("|");
sb.append(rs.getString(3)).append("|");
sb.append(rs.getString(4)).append("|");
sb.append(rs.getString(5)).append("|");
sb.append(rs.getString(6)).append("|");
sb.append(rs.getString(7)).append("|");
sb.append(rs.getString(8)).append("|");
sb.append(rs.getString(9)).append("|");
sb.append(rs.getString(9)).append("|");
sb.append(rs.getString(10)).append("|");
sb.append(rs.getString(11)).append("|");
sb.append("\n");
count ++;
if (count % 10000 == 0) {
out.write(sb.toString());
sb.delete(0, sb.length());
}
}
/**
* @author dingting
* @title 会计凭证信息文件
* @param out BufferedWriter
* @param sdate String
* @return int 0为执行不成功,1为执行成功
*/
public int oneWriteData(BufferedWriter out, String sdate) {
odbcConnection mySybase = new odbcConnection();
Connection conndb = null;
PreparedStatement ps=null;
ResultSet rs=null;
int back = 0; //如果返回0为不成功,如果返回1为成功。
try {
conndb = mySybase.getConnection();
conndb.setAutoCommit(false);//没执行前关闭所有链接
String readStr = "select RFDT,IOMK,CYNO,BRNO,AMCD,OTCD,ACIT,TSAM,PRID,USID,MARK from XKJ where RFDT='" +sdate + "' order by BRNO"; System.out.println("dingting:Now end to excute from bankcredit..........");
ps = conndb.prepareStatement(readStr);
rs = ps.executeQuery();
StringBuffer sb = new StringBuffer(128);
int count = 0;
while (rs.next()) {
sb.append("|");
sb.append(rs.getString(1)).append("|");
sb.append(rs.getString(2)).append("|");
sb.append(rs.getString(3)).append("|");
sb.append(rs.getString(4)).append("|");
sb.append(rs.getString(5)).append("|");
sb.append(rs.getString(6)).append("|");
sb.append(rs.getString(7)).append("|");
sb.append(rs.getString(8)).append("|");
sb.append(rs.getString(9)).append("|");
sb.append(rs.getString(9)).append("|");
sb.append(rs.getString(10)).append("|");
sb.append(rs.getString(11)).append("|");
sb.append("\n");
count++;
if (count % 10000 == 0) { //每次批量插入10000条
out.write(sb.toString()); //插入文本
sb.delete(0, sb.length()); //每次先清空一次缓存
out.flush(); //要强迫写出一个输出流中的所有数据
}
}
if (!sb.equals("")) {
back = 1;
}
System.out.println("dingting:Now end to excute from bankcredit..........");
out.write(sb.toString());
out.flush();//要强迫写出一个输出流中的所有数据
out.close();//要关闭一个输出流并释放所有与之相关的系统资源
}
catch (Exception ex) {
System.out.println(mySybase.getErrorMessage(ex,"Application error,please contact to your Software Designer!").toString());
}
finally {
try {
if (rs != null) {
rs.close();
}
if (ps != null) {
ps.close();
}
if (conndb != null) {
conndb.close();
}
}
catch (Exception e) {
}
}
return back;
}---------
@echo off
echo 正在设置环境变量,请稍等......
set JAVA_HOME=\jdk
set path=%JAVA_HOME%\bin;%JAVA_HOME%\lib;
set CLASS_PATH=%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;
echo 设置环境变量成功!!!
echo dingting..............!!!
java -Xms128m -Xmx256m //-----主要在这里,对jvm进行配置
cd /BankMessage/classes/
java -cp ".;%CLASSPATH%" tf.dt.credit.view.CreditMessageView
echo. & pause