[英]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.