首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

用JAVA循环添加大量数据到Sql Server时出现“Error establishing socket”解决思路

2012-02-25 
用JAVA循环添加大量数据到Sql Server时出现“Error establishing socket”问题是这样的,我用循环语句存储大

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


e1.printStackTrace();
}
} finally {

try {
if (psmt != null)
psmt.close();
if (conn != null) {
conn.setAutoCommit(true);
conn.close();
}
} catch (Exception e) {
// TODO: handle exception
}
if (resultCount != null)
resultCount = 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(new java.sql.Date(fn.lastModified()));
//result = new InputFile(fn).getVeResult();

try {
conn = bs.getConnection();
conn.setAutoCommit(false);
psmt =
conn.prepareStatement(
" insert into BSC00050P values (?,?,?,?) ");
//for (Iterator iter = result.iterator(); iter.hasNext();) {
//BSC bsc = (BSC) iter.next();
//psmt.setString(1, bsc.getFunctionId());
//psmt.setDate(2, bsc.getUsageDate());
//psmt.setInt(3, bsc.getCount());
//psmt.setTimestamp(4, bsc.getLastTime());
//psmt.addBatch();
//}
//psmt.executeBatch();
System.out.println("insert Success!!!");

} catch (SQLException e) {
// TODO 自动生成 catch 块

e.printStackTrace();
} finally {
try {
if (psmt != null)
psmt.close();
if (conn != null) {
conn.setAutoCommit(true);
conn.close();
}
} catch (Exception e) {
// TODO: handle exception
}
}

}*/

}
}

热点排行
Bad Request.