【问题标题】:Copying Resultset content to arraylist and comparing both the values将结果集内容复制到 arraylist 并比较两个值
【发布时间】:2013-08-27 09:30:49
【问题描述】:

在下面的代码中,我将resultset 的内容复制到arraylist。 wile 循环的第一部分,即while(RS.next()) 正在返回结果,但是当光标移动到 下一个 while 循环,即 while(SR.next()) 我得到“结果集已关闭”。请帮助我在哪里做错了。

       String SSQ =   "select DISTINCT S_NUMBER from OTG.S_R_VAL" +

                    "  WHERE R_TS = (SELECT MAX(R_TS) FROM OTG.S_R_VAL) order by S_NUMBER";

              String SDS = "SELECT DISTINCT S_NUMBER FROM OTG.S_R_VAL AS STG WHERE S_NUMBER NOT IN" +

                            "(SELECT S_NO FROM OTG.R_VAL AS REV WHERE STG.S_NUMBER = REV.S_NO )";

              String SSR = "SELECT DISTINCT S_NO FROM OTG.R_VAL where S_NO != 'NULL' order by S_NO";

              String SSO =  "Select O_UID from OTG.OPTY where C_S_NO IN" +

             "( SELECT DISTINCT S_NUMBER FROM OTG.S_R_VAL AS STG WHERE S_NUMBER NOT IN(SELECT S_NO FROM OTG.R_VAL AS REV WHERE STG.S_NUMBER = REV.S_NO ))";

              //Statement statement;

            try {

         connection = DatabaseConnection.getCon();

         statement = connection.createStatement();

         statement1 = connection.createStatement();

         statement2 = connection.createStatement();

         statement3 = connection.createStatement();

         statement4 = connection.createStatement();



      ResultSet RS = statement1.executeQuery(selectQuery);

      ResultSet DS = statement2.executeQuery(Distinct_SiebelNo);

      ResultSet SR = statement3.executeQuery(SiebelNo_Rev);

      ResultSet SO = statement4.executeQuery(selected_OppId);




      ArrayList<String> RSList = new ArrayList<String>(); 

      ArrayList<String> SRList = new ArrayList<String>();

     /* ResultSetMetaData resultSetMetaData = RS.getMetaData();

      int count = resultSetMetaData.getColumnCount();*/

     int count=1;

      System.out.println("******count********"+count); 

      while(RS.next()) {

          int i = 1;

          count=1;

          while(i < count) 

                      {

              RSList.add(RS.getString(i++));

                  }

          System.out.println(RS.getString("SIEBEL_NUMBER"));


          RSList.add(  RS.getString("SIEBEL_NUMBER"));


        }

    /*  ResultSetMetaData resultSetMetaData1 = SR.getMetaData();

      int count1 = resultSetMetaData1.getColumnCount();*/

      int count1=1;

      while(SR.next()) {

          int i = 1;

          while(i < count1) 

                      {

              SRList.add(SR.getString(i++));

                  }

          System.out.println(SR.getString("SIEBEL_NO"));

          SRList.add(  SR.getString("SIEBEL_NO"));


        }SR.close();

    connection.commit();


} catch (SQLException e) {

        // TODO Auto-generated catch block

        e.printStackTrace();

    }
  }
}
}

【问题讨论】:

    标签: java sql jdbc db2


    【解决方案1】:

    每个循环的逻辑都有缺陷。

      int count=1;//Count is being set to one
      while(RS.next()) {
          int i = 1;//i is being set to one
          count=1;//count again set to one
          while(i < count) //condition will always fail as one is never less than one
          {
              RSList.add(RS.getString(i++));//Code is never Reached
    
          }
          System.out.println(RS.getString("SIEBEL_NUMBER"));
    
    
          RSList.add(  RS.getString("SIEBEL_NUMBER"));
    
    
        }
    

    第二个 while 不需要。就用这个吧:

       int count = 1;
       while(RS.next()) {
          RSList.add(RS.getString(count++));
          System.out.println(RS.getString("SIEBEL_NUMBER"));
          RSList.add(  RS.getString("SIEBEL_NUMBER"));
        }
    

    编辑

       int count1=1;
       while(SR.next()) {
          SRList.add(SR.getString(count1++));
          System.out.println(SR.getString("SIEBEL_NO"));
          SRList.add(  SR.getString("SIEBEL_NO"));
       }
    

    编辑 2:

    for (String s : RSList)
       for(String s1 : SRList)
          if (s.equals(s1))
             //Do what you need
    

    【讨论】:

    • 嗨 Aashray,我按照你说的更正了代码。我正在获取第一个结果集的值,即“RS”。现在如何获得“SR”的第二个结果集值?请帮忙
    • 嗨 Aashray,我在你提到的时候包含了上述解决方案。它起作用了,现在如何比较这两个数组列表并找出哪些值相等?请帮忙,因为我是 java 新手。
    • 使用foreach 循环。
    • 嗨 Aasharay,非常感谢。上述解决方案有效。你能帮我解决这个问题吗:stackoverflow.com/questions/18466171/…提前谢谢。
    【解决方案2】:

    您在第二个循环(System.out.println 行)中使用第一个结果集(RS

    【讨论】:

    • 嗨,我在上面的代码中更正了。但是我现在没有获得第二个 while 循环内容。请帮忙:-(
    猜你喜欢
    • 2013-04-05
    • 1970-01-01
    • 1970-01-01
    • 2011-03-27
    • 2017-02-16
    • 1970-01-01
    • 1970-01-01
    • 2013-08-27
    • 2021-06-04
    相关资源
    最近更新 更多