java - 准备好的语句仅检索第一行

标签 java mysql jdbc

我正在开发一个网络应用程序,用户可以在其中插入许多“产品”。这些产品将被插入到 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/

相关文章:

java - 将 onClickListener 设置为 Bottom Sheet 布局中的按钮

java - 在没有大量查询的情况下,在 where 子句中使用 ArrayList 中的值?

Javafx 选择多行

java - HBASE备份-导出/导入的Java API如何工作?

python - mysql sum 只产生 1

mysql - 分组时的问题

java - 如何在 vector 中实现按钮

java - 如何将 jdbc 连接器连接到 MySql 数据库服务器?

java - 如何使用 JDBC 根据多个条件过滤数据库记录?

java - 在持久化期间忽略 JPA 字段的最简单方法是什么?