[英]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()
返回true
, rs2.next()
由於短路而不會調用rs2.next()
和rs3.next()
。 因此rs2
和rs3
都將在第一行之前。 而且如果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.