我想从数据库中检索所有数据,同时,我想知道我获得了多少行数据。这是我的SQL:
rs = s.executeQuery("SELECT COUNT(*), * FROM tblUser");
这是一个有效的SQL语句吗?在我检索完所有数据之后,如何将它们设置为不同的变量?例如,我在数据库中有一个名为UserID
的列,我可以使用rs.getString('UserID')
来获取它,但是如何获取COUNT(*)
的结果?
答案 0 :(得分:6)
您的SQL 不有效。执行所需操作的ANSI标准方法使用窗口函数:
select count(*) over () as total_cnt,
u.*
from tblUser u;
这会为每一行添加一个新列 - 这似乎就是你想要的。还有其他机制,具体取决于执行此操作的基础数据库。
答案 1 :(得分:0)
如果您的RDBMS不支持窗口函数,则可以选择
rs = s.executeQuery("SELECT B.cnt, U.*
FROM tblUser U,
(SELECT count(*) cnt FROM tblUser) B");
答案 2 :(得分:0)
您请求的结果不是相互关联的,因此请运行两个查询:
rs1 = s.executeQuery("SELECT COUNT(*) FROM tblUser");
rs2 = s.executeQuery("SELECT * FROM tblUser");
并以通常的方式检索值(仅适用于rs1)。
答案 3 :(得分:0)
您可以这样做来计算resultset中的行数
String query = "Select * from tblUser";
rs = s.executeQuery(query);
public int getCount(ResultSet rs) {
int rows = 0;
while(rs.next()) {
i++;
}
return i;
}
通过这种方式,您可以获得结果集以及计数
答案 4 :(得分:0)
由于您已经在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