繁体   English   中英

错误:在Java中开始结果集之前

[英]Error: Before start of result set in Java

我知道这是一个愚蠢的问题,但是我仍然需要这样做。 这是Java应用程序中的一个基本程序,我想同时使用3个查询来打印表。

(在这种情况下,我没有使用任何主键,因此请帮助我解决此问题而不将属性设为主键-我知道这不是一个好习惯,但是现在我需要完成它。)

我的代码:

    Connection con = null;        
    Statement stat1 = null, stat2 = null, stat3 = null;
    ResultSet rs1, rs2, rs3;
    stat1 = con.createStatement();
    stat2 = con.createStatement();
    stat3 = con.createStatement();

    String str = "\nProduct\tC.P\tS.P.\tStock\tExpenditure\tSales";
    info.setText(str);

    String s1 = "SELECT type, cp, sp, stock FROM ts_items GROUP BY type ORDER BY type";
    String s2 = "SELECT expenditure FROM ts_expenditure GROUP BY type ORDER BY type";
    String s3 = "SELECT sales FROM ts_sales GROUP BY type ORDER BY type";
    rs1 = stat1.executeQuery(s1);  
    rs2 = stat2.executeQuery(s2); 
    rs3 = stat3.executeQuery(s3); 

    String type;
    int cp, sp, stock, expenditure, sales;

   while( rs1.next() || rs2.next() || rs3.next() )
   {

       type = rs1.getString("type");
       cp = rs1.getInt("cp");
       sp = rs1.getInt("sp");
       stock = rs1.getInt("stock");

       expenditure = rs2.getInt("expenditure");

       sales = rs3.getInt("sales");

       info.append("\n" + type + "\t" + cp + "\t" + sp + "\t" + stock + "\t" + expenditure + "\t" + sales);


   }

输出:

Runtime Exception: Before start of result set 

这就是问题:

while( rs1.next() || rs2.next() || rs3.next() )

如果rs1.next()返回truers2.next()由于短路而不会调用rs2.next()rs3.next() 因此rs2rs3都将在第一行之前。 而且如果rs1.next()返回false,那么无论如何您都无法从中读取...

我怀疑您实际上想要的是:

while (rs1.next() && rs2.next() && rs3.next())

毕竟,您只想继续进行下去,而所有三个结果集都有更多信息,对吗?

老实说,目前尚不清楚为什么您没有进行适当的加入。 这对我来说意义更大……然后,您将不会尝试在单个连接上使用多个结果集,也不会依赖于所有不同表中存在完全相同的type值。

您执行“ OR因此可以想象只有一个ResultSet有结果。

您最终要尝试从空结果集中读取数据。

假设rs1有一个结果,而rs3有3个结果。 现在按照您的代码,它将因rs1.getString("type");失败rs1.getString("type"); 在第二次迭代中。 最好分别遍历每个resultSet。

如果您的三个表之一缺少type值,这将导致严重错误。 您的代码仅假设您将从所有表中获取所有类型。 您当前的数据集可能是这种情况,但这意味着您的代码根本不够健壮。

我会严重建议仅使用一个SQL语句,该语句将三个选择中的每一个都作为子选择,然后将它们全部连接在一起。 您的Java可以仅迭代此SQL语句的结果。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM