【问题标题】:while(rs.next()) does not returns all records but just the last onewhile(rs.next()) 不返回所有记录,只返回最后一条
【发布时间】:2016-05-23 06:40:25
【问题描述】:

在我的情况下,我使用 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()) 来解决问题?

【问题讨论】:

  • 你的问题不清楚
  • rs.next 是正确的方法。您也可以通过覆盖以前的元素来仅存储最后一个元素。但是为了在那里找到它,缺少代码。

标签: java jdbc prepared-statement resultset


【解决方案1】:

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

【讨论】:

  • 另外,请注意 setLibSiglDev 调用了两次,因为它是前缀设置而不是添加,我怀疑这是一个数组将多个值。
  • @AxelH 确实!从 OP 复制粘贴,但根据列名,我猜第一个应该是对 setLibDevDev 的调用,所以类似。
  • @AxelH 没有被调用两次,一个是LIB_SIGL_DEV,另一个是LIB_DEV_DEV :)
  • @khawlabelgacem 是的,结果集有两个不同的行,但您在设计上使用相同的设置器。如果 setter 将值推送到数组中,我会使用 addXXX 而不是 setXXX
【解决方案2】:

为了 100% 地告诉您问题出在哪里,您的代码的某些部分丢失了,但您似乎在 while 循环之前声明了 devise,而不是在每次迭代时覆盖它的值。 这就是为什么你有 3 个结果,但它们都是一样的。

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

【讨论】:

  • 是的,这是我在 while 循环之前声明设计的问题;我刚刚更正了:)谢谢
【解决方案3】:

detailCaisse.setDevise(devise); 每次迭代都采用相同的引用但每次迭代引用值都会更改的问题,因此显示迭代值您应该在每次迭代时创建新的 new Devise();

【讨论】:

    【解决方案4】:

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

    你不能同时拥有它。要么你正确地计算了所有的行,要么你没有。你做到了,你不可能得到正确的计数,除非while (rs.next()) wa 工作,ergo while (rs.next()) 是正确的代码。

    显然某处有问题其他地方。

    【讨论】:

      猜你喜欢
      • 2015-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-27
      • 2019-05-26
      • 2016-05-22
      • 2018-09-13
      相关资源
      最近更新 更多