那里。 我是使用 java 的初学者。我想为我的 SQL 查询结果做一个嵌套的 while 循环。
我原来的结果如下,
eno ename title date_visit ssn pname charge
103 Jekyl Doctor 20170717 946883650 Gershwin 125
106 Ratchet Nurse 20170817 946883650 Gershwin 125
103 Jekyl Doctor 20170917 946883650 Gershwin 182
104 Caligari Doctor 20170707 831287780 Schubert 182
106 Ratchet Nurse 20170930 799023031 Haydn 190
102 Welby Doctor 20170818 416806352 Bernstein 210
102 Welby Doctor 20170808 874136439 Brahms 245
104 Caligari Doctor 20170808 796235486 Wagner 245
102 Welby Doctor 20170929 445139565 Chopin 405
102 Welby Doctor 20170910 874136439 Brahms 512
103 Jekyl Doctor 20170910 524246868 Verdi 512
103 Jekyl Doctor 20170909 129141378 Vivaldi 667
103 Jekyl Doctor 20170909 524246868 Verdi 667
我写了如下我的 java 语句,
//Now we execute our query and store the results in the myresults object:
ResultSet myresults1 = stmt1.executeQuery("SELECT DISTINCT eno, ename, title FROM Staff_Activity");
ResultSet myresults2 = stmt2.executeQuery("SELECT eno, ename, title, date_visit, ssn, pname, SUM(charge) AS total_charge FROM Staff_Activity GROUP BY eno, ename, title, date_visit, ssn, pname");
System.out.println("Employee_ID\tEmployee_Name\tTitle");
System.out.println("-----------\t-------------\t------"); //Print a header
while (myresults1.next()) { //pass to the next row and loop until the last
System.out.println(myresults1.getInt("eno") + "\t\t" + myresults1.getString("ename") + "\t\t" + myresults1.getString("title"));
while (myresults2.next()) {
if (myresults1.getInt("eno")==(myresults2.getInt("eno"))) {
System.out.println(myresults2.getInt("date_visit") + "\t\t" + myresults2.getInt("ssn") + "\t\t" + myresults2.getString("pname") + "\t\t" + myresults2.getInt("total_charge"));
}//Print the current row
}
System.out.println();
}
我只得到了表中一名员工的结果,
Employee_ID Employee_Name Title
----------- ------------- ------
103 Jekyl Doctor
20170909 524246868 Verdi 667
20170909 129141378 Vivaldi 667
20170910 524246868 Verdi 512
20170717 946883650 Gershwin 125
20170917 946883650 Gershwin 182
106 Ratchet Nurse
102 Welby Doctor
104 Caligari Doctor
真的很想知道我的代码出了什么问题。
提前致谢。
最佳答案
第一次执行第二个循环,会走到myresults2
的结尾;一旦发生这种情况,myresults2.next()
将始终返回 false,因此它只会在第一次运行。
如果 ResultSet
是 forward only 则不能将光标位置重置为开头,因此每次完全使用其 ResultSet 时都必须重新执行第二个查询
。
要使 ResultSet
可滚动(不只是向前滚动)并因此能够在不重新执行查询的情况下重置其光标位置,请参见以下示例:https://stackoverflow.com/a/8033197/6245535 .
另一个优化是使用 WHERE
子句和来自第一个循环的当前“eno”过滤执行第二个查询(最好使用 PreparedStatement
)而不是总是检查“eno”代码是否与 if
语句匹配。
关于java - JDBC 嵌套 while 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47613153/