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来调用它们