使用select count(*)获取结果集的大小

gzjq41n4  于 2021-07-13  发布在  Java
关注(0)|答案(5)|浏览(366)

我想从数据库中检索所有的数据,同时,我想知道我得到了多少行数据。这是我的sql:

rs = s.executeQuery("SELECT COUNT(*), * FROM tblUser");

这是有效的sql语句吗?在我检索了所有的数据之后,如何将它们设置为不同的变量?例如,我有一个名为 UserID 在数据库中,我可以使用 rs.getString('UserID') ,但是如何得到结果呢 COUNT(*) ?

jtoj6r0c

jtoj6r0c1#

您的sql无效。ansi标准方法使用窗口函数来执行所需操作:

select count(*) over () as total_cnt,
       u.*
from tblUser u;

这将向每一行添加一个新的列——这似乎就是您想要的。还有其他机制,具体取决于执行此操作的底层数据库。

aemubtdh

aemubtdh2#

您请求的结果不相关,因此运行两个查询:

rs1 = s.executeQuery("SELECT COUNT(*) FROM tblUser");
rs2 = s.executeQuery("SELECT * FROM tblUser");

并以通常的方式检索值(一个仅用于rs1)。

dced5bon

dced5bon3#

您可以这样做来计算结果集中的行数

String query = "Select * from tblUser";
rs = s.executeQuery(query);

 public int getCount(ResultSet rs) {
  int rows = 0;
  while(rs.next()) {
     i++;
  }
  return i;
}

这样你可以得到结果集以及计数

hrysbysz

hrysbysz4#

由于您已经在访问vba中的记录集,最简单的方法可能是将记录集的计数返回到:

rs = s.executeQuery("SELECT * FROM tblUser");
If Not rs.EOF Then
    ' Important: You must move to the last record to 
    ' obtain the count of the full recordset
    rs.MoveLast
    rsCount = rs.RecordCount
    ' Remember to Return to the First Record so that you can 
    ' continue to use the recordset
    rs.MoveFirst
End If
06odsfpq

06odsfpq5#

如果您的rdbms不支持窗口函数,则可以选择此选项

rs = s.executeQuery("SELECT B.cnt, U.* 
                     FROM tblUser U, 
                     (SELECT count(*) cnt FROM tblUser) B");

相关问题