用JAVA循环添加大量数据到Sql Server时出现“
Error establishing socket”
问题是这样的,我用循环语句存储大量数据到Sql Server中时,前面几千行都没问题,然后突然就出现了“Error establishing socket”这个错误,我用synchronized规定同一时间只能运行一次存储方法了,还是出现这个错误,请高人给我指点一下!
------解决方案--------------------建议使用插入批处理Statement.addBatch(String sql)
把最终处理好的SQL语句先加到batch中然后一次执行,效率貌似高一点
------解决方案--------------------看看我的怎么样
package com.print;
import java.io.File;
import java.io.FilenameFilter;
import
java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import
java.sql.SQLException;
import java.sql.Timestamp;
import java.util.Date;
import java.util.Iterator;
import java.util.Vector;
import org.apache.commons.dbcp.BasicDataSource;
/*
* 创建日期 2007-11-23
*
* 更改所生成文件模板为
* 窗口 > 首选项 > Java > 代码生成 > 代码和注释
*/
/**
* @author lianglei.zhu
*
* 更改所生成类型注释的模板为
* 窗口 > 首选项 > Java > 代码生成 > 代码和注释
*/
public class test {
public static void main(String[] arg0) {
//存储单日志的统计信息
Vector result = new Vector();
//存储所有日志的统计信息
Vector resultCount = new Vector();
java.sql.Date date = null;
File dir = new File("E:\\function\\");
date = new java.sql.Date(dir.lastModified());
File[] fnLogFile = dir.listFiles(new FilenameFilter() {
public boolean accept(File arg0, String arg1) {
// TODO 自动生成方法存根
return arg1.startsWith("function.log");
}
});
File fn = null;
BasicDataSource bs = new BasicDataSource();
bs.setDriverClassName("com.ibm.as400.access.AS400JDBCDriver");
bs.setUrl("jdbc:as400://192.168.1.220;databasename=ERPDEVDB");
bs.setUsername("ERPDEVDB");
bs.setPassword("ERPDEVDB");
bs.setMaxActive(5);
Connection conn = null;
PreparedStatement psmt = null;
/*
* 方法一
* 适合日志的批量处理
* */
for (int i = 0; i < fnLogFile.length; i++) {
fn = fnLogFile[i];
System.out.println(fn.getName());
java.sql.Date oldTime = new java.sql.Date(fn.lastModified());
System.out.println(oldTime);
//如果日志出现重复
if (oldTime.getDate() == date.getDate()
&& oldTime.getMonth() == date.getMonth()) {
result = (Vector) resultCount.get(resultCount.size() - 1);
resultCount.remove(resultCount.size() - 1);
result = new InputFile(fn).doublelog(result);
} else {
date = oldTime;
//获得日志统计信息
result = new InputFile(fn).getVeResult();
}
resultCount.add(result);
}
try {
//连接ODBC
conn = bs.getConnection();
conn.setAutoCommit(false);
psmt =
conn.prepareStatement("insert into BSC00050P values (?,?,?,?)");
//循环读取日志的统计信息,并提交到PSMT中
for (Iterator iter = resultCount.iterator(); iter.hasNext();) {
result = (Vector) iter.next();
for (Iterator itr = result.iterator(); itr.hasNext();) {
BSC bsc = (BSC) itr.next();
psmt.setString(1, bsc.getFunctionId());
psmt.setDate(2, bsc.getUsageDate());
psmt.setInt(3, bsc.getCount());
psmt.setTimestamp(4, bsc.getLastTime());
psmt.addBatch();
}
}
//PSMT批量处理
psmt.executeBatch();
System.out.println("Success!!!");
} catch (
SQLException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
try {
if (conn != null)
System.out.println("conn error");
conn.rollback();
} catch (SQLException e1) {
// TODO 自动生成 catch 块