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
。内循环退出时,i
为11
,满足外循环条件,立即退出。
你正在做(几乎)完全同样的事情,而不是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;
我在下面显示的代码中有两个循环。问题是第一个循环只迭代一次。它没有显示所有数据。
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
。内循环退出时,i
为11
,满足外循环条件,立即退出。
你正在做(几乎)完全同样的事情,而不是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;