如何在ResultSet中查找记录数

时间:2011-12-01 08:01:32

标签: java jdbc resultset

我在Oracle查询后得到ResultSet。当我在无限循环中迭代ResultSet时。

ResultSet rs = (ResultSet) // getting from statement
while (rs.next()) {
//
//
}

此循环未终止,因此我尝试使用rs.getFetchSize()查找记录数并返回值 10 。 我想知道这是否是找出ResultSet中记录数的正确方法,如果计数为10,为什么它会进入无限循环。 请提出你的意见。

7 个答案:

答案 0 :(得分:8)

实际上,ResultSet没有关于它将返回的实际行数的线索。 实际上,使用分层查询或流水线函数,数字也可能是无限的。 10是结果集应该/将尝试在单个操作中获取的建议行数。 (见下面的评论)。

最好检查您的查询,如果它返回的行数超出预期。

答案 1 :(得分:5)

要知道存在的记录数,请尝试以下代码

ResultSet rs =  // getting from statement

try {
        boolean b = rs.last();
        int numberOfRecords = 0;
        if(b){
            numberOfRecords = rs.getRow();
        }
    } catch (SQLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

答案 2 :(得分:3)

一个简单的getRowCount方法可能如下所示:

private int getRowCount(ResultSet resultSet) {
   if (resultSet == null) {
    return 0;
   }
   try {
       resultSet.last();
       return resultSet.getRow();
   } catch (SQLException exp) {
       exp.printStackTrace();
   } finally {
       try {
          resultSet.beforeFirst();
       } catch (SQLException exp) {
          exp.printStackTrace();
       }
   }
   return 0;
}

您的resultSet应该可滚动以使用此方法。

看来这似乎与question

上的类似行相似

答案 3 :(得分:1)

当你执行一个查询并获得一个ResultSet时,我会说它真的就在这个时候你甚至程序自己实际上没有返回多少结果,这种情况与Oracle CURSOR非常相似,它是只是向Oracle声明你想要进行这样的查询,因此我们必须为每个ResultSet逐行获取行到最后一行。

正如上面的人已经准备好回答:rs.last将迭代到最后一个,此时程序能够完全返回多少行。

答案 4 :(得分:0)

if(res.getRow()>0)
{
     // Data present in resultset<br>
}
else
{
      //Data not present in resultset<br>
}

答案 5 :(得分:0)

您可以查看下面的代码片段,您可以在其中找到如何计算数据集中加载的记录数。此示例正在使用外部数据集(以json格式提供),因此您可以从您的开始。必要的代码段放在控制器的脚本中(该页面基于ApPML javascript,cotroller与ApPML的加载对象一起工作)。控制器中的代码返回加载的数据集reocords的数量和数据模型的字段数。

<!DOCTYPE html>
<html lang="en-US">
<title>Customers</title>
<style>
    body {font: 14px Verdana, sans-serif;}
    h1 { color: #996600; }
    table { width: 100%;border-collapse: collapse; }
    th, td { border: 1px solid grey;padding: 5px;text-align: left; }
    table tr:nth-child(odd) {background-color: #f1f1f1;}
</style>
<script src="http://www.w3schools.com/appml/2.0.2/appml.js"></script>
<body>
    <div appml-data="http://www.w3schools.com/appml/customers.aspx" appml-controller="LukController">
        <h1>Customers</h1>
        <p></p>
        <b>It was loaded {{totalRec}} records in total.</b>
        <p></p>
        <table>
            <tr>
                <th>Customer</th>
                <th>City</th>
                <th>Country</th>
            </tr>
            <tr appml-repeat="records">
                <td>{{CustomerName}}</td>
                <td>{{City}}</td>
                <td>{{Country}}</td>
            </tr>
        </table>
    </div>
    <script>
        function LukController($appml) {
            if ($appml.message == "loaded") {
                $appml.totalRec = Object.keys($appml.data.records).length;
            }
        }
        // *****************************************************************
        // Message	Description
        //
        // ready	Sent after AppML is initiated, and ready to load data.
        // loaded	Sent after AppML is fully loaded, ready to display data.
        // display	Sent before AppML displays a data item.
        // done	    Sent after AppML is done (finished displaying).
        // submit	Sent before AppML submits data.
        // error	Sent after AppML has encountered an error.
        // *****************************************************************
    </script>
</body>

</html>

答案 6 :(得分:0)

我得到了答案: - 以下是您需要遵循的步骤:

  1. 确保您使用的是选择查询(例如,从员工中选择*)。
  2. 不要使用计数查询(例如,从员工中选择计数(*))。
  3. 然后使用以下步骤:

    Statement stmt=conn.createStatement();
    ResultSet rs=stmt.executeQuery("select * from employee");
        while(rs.next()){
            rowCount++;
        }
        return rowCount;
    }
    

    其中rsResultSet的对象。

    然后您将获得确切的行数。