【发布时间】:2011-10-18 13:55:09
【问题描述】:
我的一个查询是为了准确返回一行(因为它是通过唯一 id 选择的记录)。如果结果集为空,我将抛出一个异常,如果它包含超过 1 行,我将抛出另一个异常。在这种情况下,使用 while(rs.next()) 遍历结果集看起来并不漂亮,恕我直言。我可以立即获取结果集中的行数吗?
【问题讨论】:
我的一个查询是为了准确返回一行(因为它是通过唯一 id 选择的记录)。如果结果集为空,我将抛出一个异常,如果它包含超过 1 行,我将抛出另一个异常。在这种情况下,使用 while(rs.next()) 遍历结果集看起来并不漂亮,恕我直言。我可以立即获取结果集中的行数吗?
【问题讨论】:
我认为没有办法在单个方法调用中做到这一点。
您可以使用 ResultSet 的 last() 方法,然后调用 ResultSet 的 getRow() 方法,这将为您提供 ResultSet 大小并根据大小在需要时抛出异常。
请记得有 finally 子句来关闭所有连接/ds :)
rs.last();
if(rs.getRow() > 1) {
throw (...);
}
【讨论】:
rs.first();
if(!rs.isLast())
throw new Exception(...);
似乎你不需要知道返回的行数,只要超过 1 行。
【讨论】:
您是否尝试过: java.sql.ResultSet.isBeforeFirst()
来自 javadoc: 检索游标是否在此 ResultSet 对象的第一行之前。
Note:Support for the isBeforeFirst method is optional for ResultSets with a result set type of TYPE_FORWARD_ONLY
Returns:
true if the cursor is before the first row; false if the cursor is at any other position or the result set contains no ro
【讨论】: