我的查询意味着只返回一行(因为它是一个唯一ID的记录选择)。如果结果集为空,我将抛出异常,如果它包含多于1行,则抛出另一个异常。在这种情况下,使用while(rs.next())迭代结果集看起来并不漂亮,恕我直言。我可以立即获得结果集中的行数吗?
答案 0 :(得分:3)
rs.first();
if(!rs.isLast())
throw new Exception(...);
似乎您不需要知道返回的行数,只要有超过1的行。
答案 1 :(得分:3)
我认为没有办法在单个方法调用中执行此操作。
您可以使用ResultSet的last()
方法,然后调用ResultSet的getRow()
方法,该方法将为您提供ResultSet大小,并根据大小在需要时抛出异常。
请记住让finally子句关闭所有连接/ ds:)
rs.last();
if(rs.getRow() > 1) {
throw (...);
}
答案 2 :(得分:0)
你试过了吗? 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