public void run() {
    while (true) {
      cp_id = new Vector();
      gateway_route = new Vector();
      service_number = new Vector();
      user_number = new Vector();
      sp_number = new Vector();
      sm = new Vector();
      link_id = new Vector();
      vMoUrl = new Vector();
      dnIndex=new Vector();
      isEmpty=true;
      try {
        con = DB.getConnection();
        con1 = DB.getConnection();
        stmt1 = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
        stmt= con1.createStatement();
        rs = stmt.executeQuery(DB.getMtSql());
        int i=0;
        while(rs.next()) {
          isEmpty = false;
  
            i++;
             mtLogger.info("ID" +String.valueOf(i)+"   "+rs.getString("dnIndex"));
            sendSms(rs.getString("dnIndex"),
              rs.getString("dcCp_id"),
              rs.getString("dcgateway_route"),
              rs.getString("dcService_number"),
              rs.getString("dcUserMobile"),
              rs.getString("dcsp_number"),
              rs.getString("dcMsg"),
              rs.getString("dclinkid"),
              rs.getString("dcMoUrl")
              );
      stmt1.executeUpdate("update smp_cp_mo  set dcSendFlag='y' where dnIndex='"+rs.getInt("dnIndex")+"'");
 
        }      } catch (Exception e) {
        if (errorLogger.isDebugEnabled()) {
          e.printStackTrace();
        }
        java.io.CharArrayWriter cw = new java.io.CharArrayWriter();
        java.io.PrintWriter pw = new java.io.PrintWriter(cw, true);
        e.printStackTrace(pw);
        errorLogger.error(cw.toString());
      } finally {
        try {
          if (rs != null) {
            rs.close();
          }
          if (stmt != null) {
            stmt.close();
          }
          if (con != null) {
            con.close();
          }
        } catch (Exception e) {
          if (errorLogger.isDebugEnabled()) {
            e.printStackTrace();
          }
          java.io.CharArrayWriter cw = new java.io.CharArrayWriter();
          java.io.PrintWriter pw = new java.io.PrintWriter(cw, true);
          e.printStackTrace(pw);
          errorLogger.error(cw.toString());
        }
      }
      try {
        if (isEmpty) {
          sleep(Integer.parseInt(DB.getSleep()));//休眠
        }
      } catch (InterruptedException e) {
        if (errorLogger.isDebugEnabled()) {
          e.printStackTrace();
        }
        java.io.CharArrayWriter cw = new java.io.CharArrayWriter();
        java.io.PrintWriter pw = new java.io.PrintWriter(cw, true);
        e.printStackTrace(pw);
        errorLogger.error(cw.toString());
      }
    }
  }

解决方案 »

  1.   

    public void run() {
        while (true) {      isEmpty=true;
          try {
            con = DB.getConnection();
            con1 = DB.getConnection();
            stmt1 = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
             rs = stmt.executeQuery(DB.getMtSql());//select top 2 * from smp_cp_mo类似的
            int i=0;
            while(rs.next()) {
              isEmpty = false;
      
                i++;
                 mtLogger.info("ID" +String.valueOf(i)+"   "+rs.getString("dnIndex"));
    //log4j 注释
    //sendsms 发送url请求
                sendSms(rs.getString("dnIndex"),
                  rs.getString("dcCp_id"),
                  rs.getString("dcgateway_route"),
                  rs.getString("dcService_number"),
                  rs.getString("dcUserMobile"),
                  rs.getString("dcsp_number"),
                  rs.getString("dcMsg"),
                  rs.getString("dclinkid"),
                  rs.getString("dcMoUrl")
                  );
          stmt1.executeUpdate("update smp_cp_mo  set dcSendFlag='y' where dnIndex='"+rs.getInt("dnIndex")+"'");
     
            }      } catch (Exception e) {
            if (errorLogger.isDebugEnabled()) {
              e.printStackTrace();
            }
            java.io.CharArrayWriter cw = new java.io.CharArrayWriter();
            java.io.PrintWriter pw = new java.io.PrintWriter(cw, true);
            e.printStackTrace(pw);
            errorLogger.error(cw.toString());
          } finally {
            try {
              if (rs != null) {
                rs.close();
              }
              if (stmt != null) {
                stmt.close();
              }
              if (con != null) {
                con.close();
              }
            } catch (Exception e) {
              if (errorLogger.isDebugEnabled()) {
                e.printStackTrace();
              }
              java.io.CharArrayWriter cw = new java.io.CharArrayWriter();
              java.io.PrintWriter pw = new java.io.PrintWriter(cw, true);
              e.printStackTrace(pw);
              errorLogger.error(cw.toString());
            }
          }
          try {
            if (isEmpty) {
              sleep(Integer.parseInt(DB.getSleep()));//休眠
            }
          } catch (InterruptedException e) {
            if (errorLogger.isDebugEnabled()) {
              e.printStackTrace();
            }
            java.io.CharArrayWriter cw = new java.io.CharArrayWriter();
            java.io.PrintWriter pw = new java.io.PrintWriter(cw, true);
            e.printStackTrace(pw);
            errorLogger.error(cw.toString());
          }
        }
      }
      

  2.   

    晕,把你的sendSms方法贴出来看看啊
      

  3.   

    private void sendSms(String dnIndex,
                           String cpid,
                           String gatewayroute,
                           String servicenumber,
                           String usernumber,
                           String spnumber,
                           String sms,
                           String linkid,
                           String sMoUrl
                           ) throws Exception {
        us2togbk g2u=new us2togbk();
        sms=g2u.gbk2us(sms);   String urlStr = sMoUrl +
         //String urlStr = "http://218.26.177.244:9090/pro_server/http/recv_cpmt.asp" +
           "msg_type=CSTI_MO" + "&cp_id=" + cpid.trim()  + "&gateway_route="+gatewayroute.trim()+"&user_number=" + usernumber.trim() +"&service_number=" + servicenumber.trim()+
            "&sm=" + sms.trim()  + "&link_id=" + linkid.trim() + "&sp_number=" + spnumber.trim();
        mtLogger.info("ID"+dnIndex+urlStr);
        URL url = new URL(urlStr);
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        // con.setDoOutput(true);
         //OutputStreamWriter out=new OutputStreamWriter(con.getOutputStream());
        // out.close();    //con.setRequestProperty("user-agent","Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; Maxthon; (R1 1.3); .NET CLR 1.1.4322)");
        conn.setRequestProperty("user-agent","Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.1.4322)");
        conn.setRequestMethod("GET");
        conn.setDoInput(true);    try{
        sb = new StringBuffer();    BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
        while ( (response = in.readLine()) != null) {
          sb.append(response);
        }
        System.out.println(sb.toString());
        mtLogger.info("mo response is "+sb.toString());
        in.close();
         }catch(Exception e){
        System.out.println(e.getMessage());
        }
        isEmpty = true;  }
      

  4.   

    不好意思,好像没有看出问题来,
    如果试结果集有重复的记录,那就说明你的sql语句有问题
    请在rs = stmt.executeQuery(DB.getMtSql());之前System.out.println(DB.getMtSql()) ;
    如果该句有错,请检查你的DB.getMtSql()方法,应该试里面错误
      

  5.   

    我在本地测试没有重复的结果集  但是传到服务器就有问题 真是晕啊 jdbc有关系吗 还是sqlserver的驱动有关系 谢谢大家
      

  6.   

    i++;
     mtLogger.info("ID" +String.valueOf(i)+"   "+rs.getString("dnIndex")); 这个i 都不增加 重复两次一般最多 真是奇怪 
      

  7.   

    现在问题很明了   就是为什么这个单线程的中的   i的值  在mtlogger.info 打出来重复的情况 (当然这里它确实调用了两次SendSms的函数,为什么他会重复出现两次相同i值呢)小弟急 谢谢兄弟们了 解决一定高分相增 我的系统linux(webservice) +tomcat +sql server(内网数据库服务器)急急。!!!谢谢各位
      

  8.   

    那是线程的问题吗 还是url的请求的问题呢 可是我在windows下做过大量测试也没有发现(i 重复的情况  请求重复的情况啊 )
      

  9.   

    linux的问题吗 晕倒 有高人吗 帮我看看 谢谢了