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

错误:在Java中的结果集开始之前,java,mysql,database,jdbc,resultset,Java,Mysql,Database,Jdbc,Resultset,我知道这是一个愚蠢的问题,但我仍然需要这样做。 这是java应用程序中的一个基本程序,我想同时使用3个查询来打印表 (在这种情况下,我没有使用任何主键,因此请帮助我解决此问题,而不要将我的属性作为主键-我知道这不是一个好做法,但现在我需要完成它。) 我的代码: Connection con = null; Statement stat1 = null, stat2 = null, stat3 = null; ResultSet rs1, rs2, rs3;

我知道这是一个愚蠢的问题,但我仍然需要这样做。 这是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()
返回
true
rs2.next()
rs3.next()
由于短路将不会被调用。因此
rs2
rs3
都将位于第一行之前。如果
rs1.next()

我怀疑你真的想要:

while (rs1.next() && rs2.next() && rs3.next())
毕竟,当所有三个结果集都有更多信息时,您只想继续,对吗


老实说,不清楚你为什么没有进行适当的加入。这对我来说更有意义。。。这样,您就不会试图在一个连接上使用多个结果集,也不会依赖所有不同的表中都有完全相同的
类型
值。

您会执行一个
,因此,假设只有一个
结果集有结果


您最终得到的结果是尝试从空结果集中读取。

假设rs1有一个结果,rs3有3个结果。现在根据您的代码,它将在
rs1.getString(“type”)中失败在第二次迭代期间。

最好分别对每个结果集进行循环。

如果三个表中的一个表缺少
类型
值,则这将出现严重错误。您的代码只是假设您将从所有表中获取所有类型。对于您当前的数据集可能是这样,但这意味着您的代码一点也不健壮


我郑重建议只使用一条SQL语句,将三个SELECT中的每一个都作为子SELECT,然后将它们连接在一起。您的java只需迭代这个SQL语句的结果

谢谢你的回答。:)事实上,当我开始做这件事的时候,我并不知道连接和所有的事情。但是我需要尽快提交,所以没有时间修改整个代码。我现在正在使用此代码进行妥协:\@HimanshuAggarwal:您目前依赖于隐式连接,即每种类型都有一条记录。也许没关系,但如果可以的话,我真的会尝试重构它。(我甚至不清楚在一个连接上使用多个结果集是否有效…)