2011-10-18 78 views
0

我的查询意味着只返回一行(因为它是通过唯一ID选择记录)。如果结果集是空的,我将抛出一个异常,如果它包含多于一行,则抛出异常。恕我直言,在这种情况下,while(rs.next())的结果集看起来并不漂亮。我可以立即获取结果集中的行数吗?如何获取ResultSet包含的行数?

+0

重复。请参阅:[如何获取java.sql.ResultSet的大小?](http://stackoverflow.com/q/192078) – user272735

回答

3

我不认为有一种方法可以在单个方法调用中执行此操作。

您可以使用ResultSet的last()方法,然后调用ResultSet的getRow()方法,该方法将根据大小给出ResultSet大小并根据需要抛出异常。

请记得有最终条款关闭所有连接/ DS :)

rs.last(); 

if(rs.getRow() > 1) { 
throw (...); 
} 
3
rs.first(); 
if(!rs.isLast()) 
    throw new Exception(...); 

看来你并不需要知道的行数返回,只是如果有超过1

+0

这就是我实际使用的情况。 – Ivan

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