当前位置: 首页 > 知识库问答 >
问题:

为什么我的while循环只遍历数据库中的一个名称,而不是所有名称?我的程序应该对分配给同一个名字的值求和

荆梓
2023-03-14
String name;
            int sum;
            myRs = myStmt.executeQuery("SELECT DISTINCT person FROM Todo_tbl");
            while (myRs.next()) {
                name = myRs.getString("person");
                System.out.println(name);
                sum = 0;
                ResultSet myRs2 = myStmt.executeQuery("SELECT duration FROM Todo_tbl WHERE person ='" + name + "' ");
                while (myRs2.next()) {
                    sum += (int) myRs2.getInt("duration");
                    JList<Integer> list2 = new JList<>();
                }
                dfduration.addElement(sum);
            }

这是我使用的代码,问题是循环只经过一个名字,然后关闭。我不知道为什么,代码应该遍历数据库中的所有名称,并求和分配给同一名称的值。我会非常感激任何帮助!

共有1个答案

酆浩邈
2023-03-14

您正试图以交错方式使用由同一语句生成的两个结果集。这行不通。作为java的API文档。sql。声明说:

默认情况下,每个语句对象只能同时打开一个结果集对象。因此,如果一个结果集对象的读取与另一个对象的读取交织在一起,那么每个对象都必须由不同的语句对象生成。如果存在打开的对象,则语句接口中的所有执行方法都会隐式关闭该语句的当前结果集对象。

因此,一旦您在内部循环中执行myStmt.executeQuery()myRs引用的ResultSet就关闭了。因此,下一次调用myRs.next()将返回false,并且不会执行进一步的循环迭代。

我提出一个不同的问题:

sql prettyprint-override">SELECT person, duration FROM Todo_tbl ORDER BY person

然后在结果上使用单个循环。除了不需要多个语句,它将只使用一个查询,这将更加高效。

或者,省略ORDER BY子句,并在Map的帮助下,在Java端按人员执行分组。

另一方面,如果你想做的是得到每个人的所有持续时间的总和(给出的代码没有做任何其他事情,但是也许你希望个别点出于某种目的没有反映在问题中),那么最好的选择可能是要使数据库完成工作:

SELECT person, SUM(duration) as total_duration FROM Todo_tbl GROUP BY person

无论如何,关于如何编写适当的循环来处理这些结果的细节都留作练习。

 类似资料:
  • 我想写一个计算长除法问题总进位的代码。这是我为carries编写的函数。我相信问题在于,第一个while循环并没有一直运行。如果是,为什么?这是在Python 3.5中实现的。

  • 问题内容: 为什么会有“ inArray然后是“ arr” …的意义呢? 与“ withFunc和” aFunc“相同,它使代码更加复杂并且阅读起来也更混乱,为什么还要使用它们呢? 问题答案: inArray是外部名称,传递参数时函数的调用者应使用该名称。arr是函数实现者在实现中用来引用参数的内部名称。您不必提供外部名称,它使名称更易读。它更像是使快捷的函数名称和参数像Objective- C函

  • 问题内容: 我从查询中得到以下结果,并在plsql块中浏览记录并向客户发送send_email。 匿名块 我想知道最好的方法是重复查询结果,而不是发送多封电子邮件,而是发送一封包含相关详细信息的电子邮件。例如,在上述情况下SMITH重复两次,所以用上面的方法将史密斯拿到两封电子邮件,而不是我想发一封电子邮件与和 我怎样才能做到这一点? 问题答案: 为此,请不要在PL / SQL的循环内进行循环-使

  • 我想知道一个应用程序的包名,我只知道那个应用程序的应用程序名。假设我想知道一个电子邮件应用程序的包名,只是它的名字,然后如何得到它 我只知道应用程序名。 这是代码,以获得所有的应用程序的包名称,但我需要知道特定的应用程序。

  • 我有两个数据框: 我希望对 df2 执行逐行运算,我将 df2 中的每一列与 df1 中的相应行相乘,然后执行求和。 例如,对于df2的第1行,我希望计算: 同时排除不匹配(df1中的行)或具有NAs的列。 我在df1中有几千行,在df2中有数千行和列。 非常感谢任何帮助!! PS。我在Perl中使用哈希实现了这一点,并使用system()调用在Rmarkdown文档中执行这些计算。为了保持它的完

  • 我正在尝试部署我的spring应用程序。以下是pom的副本。xml文件。 以下是申请的副本。属性文件。 我得到的错误跟踪如下。 我被夹在中间。我几乎没试过什么东西。因为提供entityManager的hibernate JPA启动器是从pom中删除hibernate核心和hibernate实体管理器的。xml也是如此。但我也犯了同样的错误。除此之外,我还创建了自定义datasoruce,如下所示。