while(rs.next()) 不是 returns 所有记录,而是最后一条
while(rs.next()) does not returns all records but just the last one
在我的例子中,我使用 PreparedStatement
到 select 来自我的数据库的记录:
selected 的行数是正确的,但只显示最后一行。
我的代码:
while (rs.next()) {
DetailCaisse detailCaisse = new DetailCaisse();
devise.setLibSiglDev(rs.getString("LIB_DEV_DEV"));
devise.setLibSiglDev(rs.getString("LIB_SIGL_DEV"));
devise.setCodDevDev(rs.getInt("cod_Dev_dev"));
detailCaisse.setDevise(devise);
deviseDispo.add(detailCaisse);
}
我应该使用什么来代替 while(rs.next())
来更正问题?
您对 while(rs.next())
的使用没有任何问题。问题是您不断用新值覆盖相同的 devise
实例,从而丢失旧值。相反,您应该在每次迭代时创建一个新实例:
while (rs.next()) {
DetailCaisse detailCaisse = new DetailCaisse();
Devise devise = new Devise(); // Here!
devise.setLibSiglDev(rs.getString("LIB_DEV_DEV"));
devise.setLibSiglDev(rs.getString("LIB_SIGL_DEV"));
devise.setCodDevDev(rs.getInt("cod_Dev_dev"));
detailCaisse.setDevise(devise);
deviseDispo.add(detailCaisse);
}
the number of rows selected is correct but just the last one is displayed.
你不能两全其美。您要么正确计算了所有行,要么没有正确计算。你做到了,除非 while (rs.next())
有效,否则你不可能得到正确的计数,ergo while (rs.next())
是正确的代码。
很明显哪里有问题else.
为了 100% 地告诉您问题出在哪里,您的代码的某些部分丢失了,但您似乎在 while
循环之前声明了 devise
并且您覆盖了它的值在每次迭代中。
这就是为什么你有 3 个结果,但它们都是一样的。
此外,请注意,您在循环内用 2 个不同的值覆盖了 setLibSiglDev
,它只会使用 LIB_SIGL_DEV
。
detailCaisse.setDevise(devise);
每次迭代都采用相同的引用但每次迭代引用值都会更改的问题,因此显示迭代值你应该在每次迭代中创建新的 new Devise();
。
在我的例子中,我使用 PreparedStatement
到 select 来自我的数据库的记录:
selected 的行数是正确的,但只显示最后一行。
我的代码:
while (rs.next()) {
DetailCaisse detailCaisse = new DetailCaisse();
devise.setLibSiglDev(rs.getString("LIB_DEV_DEV"));
devise.setLibSiglDev(rs.getString("LIB_SIGL_DEV"));
devise.setCodDevDev(rs.getInt("cod_Dev_dev"));
detailCaisse.setDevise(devise);
deviseDispo.add(detailCaisse);
}
我应该使用什么来代替 while(rs.next())
来更正问题?
您对 while(rs.next())
的使用没有任何问题。问题是您不断用新值覆盖相同的 devise
实例,从而丢失旧值。相反,您应该在每次迭代时创建一个新实例:
while (rs.next()) {
DetailCaisse detailCaisse = new DetailCaisse();
Devise devise = new Devise(); // Here!
devise.setLibSiglDev(rs.getString("LIB_DEV_DEV"));
devise.setLibSiglDev(rs.getString("LIB_SIGL_DEV"));
devise.setCodDevDev(rs.getInt("cod_Dev_dev"));
detailCaisse.setDevise(devise);
deviseDispo.add(detailCaisse);
}
the number of rows selected is correct but just the last one is displayed.
你不能两全其美。您要么正确计算了所有行,要么没有正确计算。你做到了,除非 while (rs.next())
有效,否则你不可能得到正确的计数,ergo while (rs.next())
是正确的代码。
很明显哪里有问题else.
为了 100% 地告诉您问题出在哪里,您的代码的某些部分丢失了,但您似乎在 while
循环之前声明了 devise
并且您覆盖了它的值在每次迭代中。
这就是为什么你有 3 个结果,但它们都是一样的。
此外,请注意,您在循环内用 2 个不同的值覆盖了 setLibSiglDev
,它只会使用 LIB_SIGL_DEV
。
detailCaisse.setDevise(devise);
每次迭代都采用相同的引用但每次迭代引用值都会更改的问题,因此显示迭代值你应该在每次迭代中创建新的 new Devise();
。