【问题标题】:Getting the count of the resultset values [duplicate]获取结果集值的计数[重复]
【发布时间】:2014-10-17 17:44:19
【问题描述】:

我需要你的助手帮助我计算resultset 中可用值的数量。 resultset 有 22 条记录,在下面的代码中,它打印从 1 到 23 的计数。有什么方法可以得到总数。记录为 22(仅一个值)还是从第一个值中减去最后一个值?

我的代码如下:

while (rs.next())
        {

        count=0;
        name1=rs.getString("name");  
                    out.println(rs.getRow());

                 }

我尝试使用rs.first()rs.last() 并产生以下错误:

java.sql.SQLException:仅转发结果集的操作无效: 首先

我尝试将参数添加到createstatement,但存在相同的异常:

 conn.createStatement(rs.TYPE_SCROLL_INSENSITIVE, rs.CONCUR_READ_ONLY);

java.sql.SQLException:仅转发结果集的操作无效: 最后

请帮助我解决上述问题。

【问题讨论】:

标签: java jdbc resultset record-count


【解决方案1】:

你可以使用 MySQL 的count(*)

  try{
      Statement stmt = connection.createStatement();
      String selectquery = "select count(*) from YourTable";
      ResultSet rs = stmt.executeQuery(selectquery);
      rs.next();          
      System.out.println("Amount of rows :" + rs.getInt(1));
    }

如果您想根据“名称”计算行数,那么

try{
          Statement stmt = connection.createStatement();
          String selectquery = "select count(name) from YourTable";
          ResultSet rs = stmt.executeQuery(selectquery);
          rs.next();          
          System.out.println("Amount of rows :" + rs.getInt(1));
        }

【讨论】:

  • 我试图不更改查询,因为它是一个包含 10 多个字段的复杂查询
  • 在我的解决方案中,您不必使用while (rs.next()) { .. },这甚至并不复杂。
  • 问题是我使用的是动态查询,它应该根据名称显示计数。这无济于事
  • @user3407440,参见上面的编辑。
【解决方案2】:

试试这个:

int rowcount = 0;
if (rs.last()) {
  rowcount = rs.getRow();
  rs.beforeFirst(); 
}

编辑:

您需要像这样更改查询语句,以便可以使用rs.last()

Statement stmt = con.createStatement(rs.TYPE_SCROLL_INSENSITIVE);
ResultSet rs = stmt.executeQuery("Your query");

查看Oracle Docs

【讨论】:

  • 为什么不使用 resultSet.getRow()?
  • @Nabin:- 那是我用的 ;)
  • 它没有解决问题,我得到了这个错误:java.sql.SQLException: Invalid operation for forward only resultset : last
  • @user3407440:- ResultSet.last() 和其他“绝对索引”查询操作仅在结果集可滚动时可用。您需要像这样更改查询语句:Statement stmt = con.createStatement( ResultSet.TYPE_SCROLL_INSENSITIVE );
  • @user3407440 createStatement 调用至少需要两个参数,参见 documentation conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet. ResultSet.CONCUR_READ_ONLY);
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-29
  • 2011-12-05
  • 2020-01-15
  • 2013-12-31
  • 1970-01-01
相关资源
最近更新 更多