我正在开发一个网络应用程序,用户可以在其中插入许多“产品”。这些产品将被插入到 MySQL 数据库中。当我尝试从数据库表中检索数据时遇到问题。这是我的方法:
public ArrayList<Product> getProductByAppId(int appId) {
ArrayList<Product> list = new ArrayList<Product>();
String query = "select prodId from app_prod where appId = ?";
try {
preparedStatement = connection.prepareStatement(query);
preparedStatement.setInt(1, appId);
resultSet = preparedStatement.executeQuery();
while (resultSet.next()) {
Product item = getProductById(resultSet.getInt("prodId"));
list.add(item);
}
return list;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
此方法只是获取一个 int 作为参数,并从表 app_prod
中检索我存储的所有对象。方法 getProductById
它是一个辅助方法,并且可以正常工作。当我尝试调试代码时,我发现我只进入 while 循环一次!因此,我看到的只是数据库中的第一个元素,但数据库中不止一个产品。
为了让事情变得更短,我省略了打开和关闭连接的方法,因为它们可以正常工作。
我认为这个错误是非常明显的,但我无法真正看到它。
最佳答案
好的,问题如下:
resultSet
被声明为全局变量并被两种方法使用。
当第二个方法更改其内容并通过以下方式获取它时:
resultSet.next();
并到达结尾:
主外循环尝试执行resultSet.next()
,它直接退出循环,因为它已经在getProductById
方法中提前到达了结尾。
关于java - 准备好的语句仅检索第一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25387227/