用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 块