我正在java中为库存管理系统实现一个软件。我正在使用MVC设计模式,我在尝试填充JcomboBox时发现了这个异常。我想在将项目代码传递给方法时获取所有批次。因此该方法应返回相关对象的数组列表。但是当我运行这个程序时,它给了我这样的错误,它说有空结果集。但我也尝试在终端手动sql代码,它的工作原理。所以我无法想象如何解决这个错误。如果有人能告诉我问题在哪里,我很高兴。我试图发布我的屏幕截图但由于我没有足够的声誉而无法完成
这是我的代码
String sql = "select batchNo from MainBatch where itemCode = ?";
Connection c=DBConnection.getInstance().getConnection();
PreparedStatement ps=c.prepareStatement(sql);
ps.setString(1, itemCode);
System.out.println(itemCode+" -----> item code is thiss");
ResultSet set=ps.executeQuery();
ArrayList<MainBatch> list=new ArrayList<>();
System.out.println(set.next()+" <-----result set is");
while (set.next()) {
MainBatch batch=new MainBatch(set.getString("batchNo"));
list.add(batch);
}
return list;
[
答案 0 :(得分:1)
ResultSet.next()
将结果集的光标移动到下一行。当您打印它时,在while
循环之前,您将丢失第一行(或单行结果集中的唯一行)。就个人而言,我只是省略它,但如果你必须拥有它,你可以将结果提取到局部变量:
boolean next = set.next();
System.out.println(next + " <-----result set is");
while (next) {
MainBatch batch=new MainBatch(set.getString("batchNo"));
list.add(batch);
next = set.next();
}
return list;
答案 1 :(得分:0)
删除此行。
System.out.println(set.next()+" <-----result set is");
您正在调用set.next()两次,这会将结果集指针移动到下一行。