【问题标题】:Java While loop databaseJava While 循环数据库
【发布时间】:2015-04-23 18:37:46
【问题描述】:

我在下面显示的代码中有两个循环。问题是第一个循环只迭代一次。它不会显示所有数据。

st = conn.createStatement();
rs = st.executeQuery("SELECT * from geopools");           
while(rs.next()){
   System.out.println(rs.getInt("id"));
   rs = st.executeQuery("SELECT * from Geofields where id_pool='"+rs.getInt("id")+"'");
   while (rs.next()) {
         System.out.println(rs.getString("name")+"//");
   }
}

【问题讨论】:

    标签: java mysql while-loop


    【解决方案1】:

    效果很好,但是当我添加第三个循环时,我遇到了同样的问题,这是我的源代码:

    st = conn.createStatement();
    rs = st.executeQuery("SELECT * from geopools");   
    int idPool=0;
    int idField =0;
    while(rs.next()){
         DefaultMutableTreeNode treeNode = new DefaultMutableTreeNode("Pool : "+rs.getString("name"));
         poolNode.add(treeNode);
         idPool = rs.getInt("id");
    
         st2 = conn.createStatement();
         rs2 = st2.executeQuery("SELECT * from Geofields where id_pool='"+idPool+"'");
         while (rs2.next()) {                    
              DefaultMutableTreeNode fieldsNode = new DefaultMutableTreeNode("Field : "+rs2.getString("name"));
              treeNode.add(fieldsNode);
              idField = rs2.getInt("id");
    
              st3 = conn.createStatement();
              rs3 = st3.executeQuery("SELECT * from geofieldsproject where id_pool='"+idPool+"'");
              while (rs3.next()) {
                    DefaultMutableTreeNode projectsNode = new DefaultMutableTreeNode("Field : "+rs3.getString("name"));
                    treeNode.add(projectsNode);                    
               }  
         }
     }            
    
     st = null;
     rs = null;
     st2 = null;
     rs2 = null;
     st3 = null;
     rs3 = null;
    

    【讨论】:

      【解决方案2】:

      是的。您的第二个循环使用 ResultSet

      假设您正在从1 循环到10

      int i = 1;
      for(; i <= 10; ++i) {
          doStuff();
      }
      

      应该很明显doStuff() 被执行了10 次。现在我们将其更改为您的循环:

      int i = 1;
      for(; i <= 10; ++i) {
          doStuff();
          for(; i <= 10; ++i) {
              doOtherStuff();
          }
      }
      

      现在doStuff被执行一次,然后我们进入内部循环。执行10 次并递增i。当内循环退出时,i11,同时满足外循环条件,立即退出。

      您正在(几乎)完全做同样的事情,而不是 i 你有一个 ResultSet 有许多行。第一个循环占用一行,并从该行打印id。然后内部循环消耗剩余的行。

      【讨论】:

      • 感谢您的澄清。
      【解决方案3】:

      这是因为您使用了相同的ResultSet。第二次迭代使用单独的ResultSet

      st = conn.createStatement();
      rs = st.executeQuery("SELECT * from geopools");           
      while(rs.next()){
         System.out.println(rs.getInt("id"));
         ResultSet rs2 = st.executeQuery("SELECT * from Geofields where id_pool='"+rs.getInt("id")+"'");
         while (rs2.next()) {
               System.out.println(rs2.getString("name")+"//");
         }
      }
      

      【讨论】:

      • 当您添加另一个循环时,也可以再次使用单独的 ResultSet。
      猜你喜欢
      • 2017-10-08
      • 1970-01-01
      • 1970-01-01
      • 2014-11-29
      • 1970-01-01
      • 2018-07-07
      • 2011-01-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多