我的数据库是sql server 2005,少量数据没事,当几千条以后就出现这个错误Error establishing socket,不知道是怎么回事啊,希望哪位大牛能给解答一下。

解决方案 »

  1.   

    sql sp3 sp4补丁没打上吧
      

  2.   

    package com.rongrun.homo.logic;import java.text.SimpleDateFormat;
    import java.util.*; 
    import java.util.Date;
    import java.sql.*;import java.util.Calendar;import com.rongrun.homo.logic.FIDTreat;
    import com.rongrun.util.publicDAO;
    import com.sun.java_cup.internal.internal_error;
    import com.sun.org.apache.xpath.internal.operations.And;public class Predo extends Thread{
    public void createTableFid(String rootcode,String startTime,String overTime) throws Exception{ 
       Connection conn=null;
       Statement stmt=null;
       ResultSet rs=null;
       String name="";
       try{conn.close();}catch(Exception e){}
       try{
       Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
       conn=DriverManager.getConnection("jdbc:microsoft:sqlserver://192.168.1.201:1433;DatabaseName=queryDatabase","iDW61","iDW61");
       stmt=conn.createStatement();
       String strSQL = "select name from sysobjects";
       rs=stmt.executeQuery(strSQL);
       while(rs.next()){
       String sName = rs.getString(name);
       if(sName.equals("fttb_"+rootcode)){
       name = sName;
       }
       }
       }catch(Exception e){}
       finally{
         stmt.close();
         conn.close();
       }
       
       
       if(name.length()==0){
       Connection conn1=null;
       Statement stmt1=null;
       ResultSet rs1=null;
       try{conn1.close();}catch(Exception e){}
       try{
    Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
    conn1=DriverManager.getConnection("jdbc:microsoft:sqlserver://192.168.1.201:1433;DatabaseName=queryDatabase","iDW61","iDW61");
        stmt1=conn1.createStatement();
    String strSQL1 = "create table fttb_" + rootcode + "(code INT primary key IDENTITY (1, 1),tasktime DATETIME,fid BIGINT not null,url ntext,ft ntext,AB00 ntext,PUBTIME datetime,sourcefrom varchar(50),publisher varchar(50),homoflag BIGINT,Negaflag INT,wordcat INT not null,wordorder INT not null,weight INT not null,webname varchar(50),spreadrode INT)";
    //System.out.println("strSQL1="+strSQL1);
    rs1=stmt1.executeQuery(strSQL1);
    //System.out.println("aaa"+strSQL1);
       }catch(Exception e){}
       finally {
       stmt1.close();
       conn1.close();
       }

       }
       else{}    publicDAO pd = new publicDAO();
       startTime = "'"+startTime+"'";
       overTime = "'"+overTime+"'";
       String sqla = "select * from cattb where rootcode=" + rootcode + " and (dt > " + startTime + " and dt <" + overTime + ") order by fid";
           System.out.println("sqla="+sqla);
    ArrayList datalist = pd.getRsList("CATDB",sqla);
    if(datalist.size() == 0){}
    String[] fidlist = new String[datalist.size()];
    int[] spreadroad = new int[datalist.size()];
    int[] wordcat = new int[datalist.size()];
    int[] wordorder = new int[datalist.size()];
    int[] weight = new int[datalist.size()];
    String[] webname = new String[datalist.size()];
    int[] d0 = new int[datalist.size()];
    int[] d1 = new int[datalist.size()];
    int[] d2 = new int[datalist.size()];
    int[] d3 = new int[datalist.size()];
    int[] d4 = new int[datalist.size()];
    int[] d5 = new int[datalist.size()];
    int[] d6 = new int[datalist.size()];
    int[] Negaflag = new int[datalist.size()]; 

    HashMap dmap3;
    for(int i=0;i<datalist.size()-1;i++){
    dmap3 = (HashMap)datalist.get(i);
    fidlist[i] = (String)dmap3.get("fid");
    //spreadroad[i] = Integer.parseInt((String)dmap3.get("spreadroad"));
    wordcat[i] = Integer.parseInt((String)dmap3.get("wordcat"));
    wordorder[i] = Integer.parseInt((String)dmap3.get("wordorder"));
    weight[i] = Integer.parseInt((String)dmap3.get("weight"));
    //webname[i] = "www.baidu.com";
    webname[i] = (String)dmap3.get("webname");
    //if(webname[i].length() == 0){webname[i] = "null";}
    d0[i] = Integer.parseInt((String)dmap3.get("d0"));
    d1[i] = Integer.parseInt((String)dmap3.get("d1"));
    d2[i] = Integer.parseInt((String)dmap3.get("d2"));
    d3[i] = Integer.parseInt((String)dmap3.get("d3"));
    d4[i] = Integer.parseInt((String)dmap3.get("d4"));
    d5[i] = Integer.parseInt((String)dmap3.get("d5"));
    d6[i] = Integer.parseInt((String)dmap3.get("d6"));
    if(d0[i] > 510000 || d1[i] > 510000 || d2[i] > 510000 || d3[i] > 510000 || d4[i] > 510000 || d5[i] > 510000 || d6[i] > 510000){
    Negaflag[i] = 1;
    }
    else{
    Negaflag[i] = 0;
    }

    }




       String[] url = new String[fidlist.length];
       String[] ft = new String[fidlist.length];
       String[] ab00 = new String[fidlist.length];
       String[] pubtime = new String[fidlist.length];
       long[] homoflag = new long[fidlist.length];
       String[] sourcefrom = new String[fidlist.length];
       String[] publisher = new String[fidlist.length];    for(int i=0;i<fidlist.length-1;i++){
       System.out.println("bbb");
       publicDAO pd1 = new publicDAO();
       String sql1 = "select * from FTTB where fid = "+ fidlist[i];
       ArrayList datalist1 = pd1.getRsList("FTDB", sql1);
       if(datalist1.size() == 0){continue;}
       HashMap fidMap;
       for(int j=0;j<datalist1.size();j++){
       fidMap = (HashMap)datalist1.get(j);
       url[i] = (String)fidMap.get("url");
       ft[i] = (String)fidMap.get("ft");
       ab00[i] = (String)fidMap.get("ab00");
       
       pubtime[i] = ((String)fidMap.get("pubdate")).substring(0,10);
       sourcefrom[i] = (String)fidMap.get("sourcefrom");
       publisher[i] = (String)fidMap.get("publisher");
       }
       
       Long[] title = new Long[fidlist.length];
       Long[] content = new Long[fidlist.length];
       publicDAO pd2 = new publicDAO();
       String sql2 = "select * from fidsimilar where fid= "+ fidlist[i];
       ArrayList datalist2 = pd2.getRsList("FPDB",sql2);
       if(datalist2.size() == 0){continue;}
       HashMap fidMapNew;
       for(int k=0;k<datalist2.size();k++){
       fidMapNew = (HashMap)datalist2.get(k);
       title[i] = Long.parseLong((String)fidMapNew.get("fid_title"));
       content[i] = Long.parseLong((String)fidMapNew.get("fid_content"));   
       }
       
       if(title[i] == 0 && content[i] == 0){
       homoflag[i] = 0;
       
       }
       else{
       if(title[i] != 0){
       homoflag[i] = title[i];
       }
       else{
       homoflag[i] = content[i];
       }
       }
       
                ////得到系统时间
       //Calendar cal=Calendar.getInstance();
           // //-0代表0天前这个时候的时间
           //cal.add(Calendar.DAY_OF_YEAR,-0);
           //SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
           //String nowtime=sdf.format(cal.getTime());
           //System.out.println(nowtime);
       Date date = new Date();
       Calendar time = Calendar.getInstance();
       SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
       

              Connection conn2=null;
       Statement stmt2=null;
       try{conn2.close();}catch(Exception e){}
       try{
       
    Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
    conn2=DriverManager.getConnection("jdbc:microsoft:sqlserver://192.168.1.201:1433;DatabaseName=queryDatabase","iDW61","iDW61");
        stmt2=conn2.createStatement();
        double random = java.lang.Math.random();//生成随机数
    int iRandom = (int)(random*10);
    if(iRandom>4){//将生成值控制在1~4
    iRandom = iRandom/3;
    }
    if(iRandom==0){//将生成值控制在1~4
    iRandom = 1;
    }
    String strSQL2 = "insert into fttb_" + rootcode + " VALUES('"+dateFormat.format(date.getTime())+"','"+fidlist[i]+"','"+url[i]+"','"+ft[i]+"','"+ab00[i]+"','"+pubtime[i]+"','"+sourcefrom[i]+"','"+publisher[i]+"','"+homoflag[i]+"','"+Negaflag[i]+"','"+wordcat[i]+"','"+wordorder[i]+"','"+weight[i]+"','"+webname[i]+"','" + iRandom + "')";
    System.out.println("strSQL2="+strSQL2);
    stmt2.execute(strSQL2);
                    
                    
       }catch(Exception e){}
       
       
       }
      
    }



       
    public static void main(String[] args) throws Exception{


    publicDAO pd = new publicDAO();
            String sqla = "select distinct rootcode from cattb";
        ArrayList datalist = pd.getRsList("CATDB",sqla);
        String[] rootcodelist = new String[datalist.size()];
        HashMap rootcodeMap;
        for(int j=0;j<datalist.size();j++){
       rootcodeMap = (HashMap)datalist.get(j);
       rootcodelist[j] = (String)rootcodeMap.get("rootcode");

    Predo pre = new Predo();
    //Calendar calendar= Calendar.getInstance();
    long start = System.currentTimeMillis();
    pre.createTableFid(rootcodelist[j], "2006-1-1", "2009-10-15");
    long end = System.currentTimeMillis();
    long sum = end - start;
    System.out.println("start="+start+"   end="+end+"   sum="+sum);
                    Thread.sleep(20);



      
      }  }
    }
      

  3.   

    createTableFid  方法里,rs 没及时关闭,不同的数据库对未及时关闭的 statement / result 的处理可能不一样,结果不保证。main 方法之前的有一段 catch 没写任何处理代码,这是你的代码原样贴上来的话就需要去改一下。
      

  4.   

    代码有两点问题 createTableFid 里rs1在finally没有去关闭。
     conn2没有关闭。