Java While 循环数据库

Java While loop database

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

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")+"//");
   }
}

因为你用的是同一个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.

假设您从 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 。然后内部循环消耗剩余的行。

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

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;