while(rs.next())不返回所有记录,只返回最后一个记录

时间:2016-05-23 06:40:25

标签: java jdbc prepared-statement resultset

就我而言,我使用PreparedStatement从我的数据库中选择记录: 选择的行数是正确的,但只显示最后一行。

我的代码:

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())来解决问题?

this picture may help u to understand the prob

4 个答案:

答案 0 :(得分:8)

您对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);
}

答案 1 :(得分:2)

您的代码的某些部分缺失,以便100%告诉您问题是什么,但似乎您在devise循环之前声明while,而不是覆盖每个部分的值迭代。 这就是你有3个结果的原因,但它们都是一样的。

另请注意,您使用2个不同的值覆盖循环内的setLibSiglDev,它只会使用LIB_SIGL_DEV

答案 2 :(得分:2)

detailCaisse.setDevise(devise);每次迭代都采用相同的引用但每次迭代都会更改参考值的问题,因此显示迭代值,每次迭代都应该进行新的new Devise();

答案 3 :(得分:-3)

  

选择的行数是正确的,但只显示最后一行。

你不能双管齐下。您是否正确计算了所有行,或者您没有。你这样做了,除非while (rs.next())工作正常,否则你无法获得正确的计数, ergo while (rs.next())是正确的代码。

显然,其他地方出现了问题。