如何在ResultSet中找到记录的数量



我在Oracle查询后得到ResultSet。当我遍历ResultSet时,它进入了无限循环。

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

这个循环没有终止,所以我尝试使用rs.getFetchSize()找到记录的数量,并返回一个值10。我想知道这是否是找出ResultSet中记录数量的正确方法,如果计数为10,为什么它会进入无限循环。

实际上,ResultSet并不知道它将返回的实际行数。事实上,使用层次查询或流水线函数,这个数字可能是无限的。10是结果集应该/将尝试在单个操作中获取的建议行数。(见下面的评论)。

如果查询返回的行数比预期的多,最好检查一下。

要知道当前记录的数量,请尝试以下代码

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();
    }

一个简单的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应该是可滚动的使用这个方法。

看一下,这似乎是关于这个问题的相似之处

当您执行查询并获得ResultSet时,我想说的是,此时您甚至程序本身实际上并不会返回多少结果,这种情况非常类似于Oracle CURSOR,它只是向Oracle声明您想要做这样的查询,因此我们必须为每个ResultSet逐个获取行,直到最后一个。

正如上面的家伙已经回答过的那样:rs.last将迭代到最后一个,此时程序有能力完全返回多少行。

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

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

<!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>

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

  1. 确保您正在使用select query(e)。select * from employee).
  2. 不要使用计数查询(e。select count(*) from employee .

然后使用以下步骤:

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

其中rsResultSet的对象。

相关内容

  • 没有找到相关文章

最新更新