簡體   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