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

Java while(rs.next())不返回所有记录,只返回最后一条记录,java,jdbc,prepared-statement,resultset,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")); dev

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


在while(rs.next())中使用
没有什么问题。问题是您不断用新值覆盖相同的
design
实例,从而丢失旧值。相反,您应该在每次迭代中创建一个新实例:

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);
}
所选行数正确,但仅显示最后一行

你不能两全其美。要么你数对了所有的行,要么你没有。你做到了,除非
while(rs.next())
wa正在工作,因此
while(rs.next())
是正确的代码,否则你不可能得到正确的计数


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

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


另外,请注意,您正在使用两个不同的值覆盖循环内的
setLibSiglDev
,它将只使用
LIB\u SIGL\u DEV
解决
detailCaisse.setDevise(devise)的问题每次迭代都使用相同的引用,但引用值每次迭代都会更改,因此显示您应该创建新的
新设计()的迭代值每次迭代。

您的问题不清楚
rs。下一步是正确的方法。您也可以通过覆盖以前的元素来只存储最后一个元素。但是为了找到它,代码是缺少的。是的,这是我在while循环之前声明设计的问题;我刚刚更正了:)谢谢,另外,请注意setLibSiglDev调用了两次,因为它是prefixe set,而不是add,我怀疑这是一个数组是否会有多个值。@AxelH!复制粘贴自OP,但根据列名,我猜第一个应该是调用
setlibdevdevdevev
,所以类似的。@AxelH没有被调用两次,一个是
LIB_SIGL_DEV
,另一个是
LIB_DEV
:)@khawlabelgacem是的,结果集的两行不同,但您在设备上使用相同的设置器。如果setter将值放入数组,我使用addXXX而不是setXXX来调用它们