我想获取结果集中的行数。我正在使用FMDB进行数据库操作。还有一个函数hasAnotherRow()
,但每次都会返回true
。下面是我的代码。
let selectQuery = "SELECT * FROM \(tableName) WHERE chrSync = 'Y'"
if let rs = database.executeQuery(selectQuery, withArgumentsIn: [])
{
// Here I want to check if rs has more than 0 rows
while(rs.next()){
let dir = rs.resultDictionary
let json = JSON(dir)
data.append(json)
print("Has another: \(rs.hasAnotherRow())") // It always returns true
}
let json = JSON(data)
return json
}
我是IOS的新手,如果已回答,请分享给我。
谢谢。
答案 0 :(得分:1)
我认为这是关键(https://github.com/aws-amplify/aws-sdk-ios/tree/master/AWSCore/FMDB):
在尝试访问之前,您必须始终调用-[FMResultSet next] 查询中返回的值,即使您只希望得到一个值:
FMResultSet *s = [db executeQuery:@"SELECT COUNT(*) FROM myTable"];
if ([s next]) {
int totalCount = [s intForColumnIndex:0];
}
快速
var s: FMResultSet? = db.executeQuery("SELECT COUNT(*) FROM myTable", withArgumentsIn: nil)
if s?.next() != nil {
var totalCount: Int? = s?.int(forColumnIndex: 0)
}
它可以用于任何SELECT,如果选择返回行,则totalCount的最后一个值将具有FMResultSet中的行数。
答案 1 :(得分:0)
FMResultSet *resultSet = [db executeQuery:@"SELECT COUNT(*) FROM myTable"];
int numRows = 0;
if ([resultSet next]) {
numRows = [resultSet intForColumn:@"COUNT(*)"];
}
以上代码段将为您提供一个名为“ COUNT(*)”的列。 [resultSet next]将遍历查询结果中的所有行(本例中为1行)。因此,这也可以用于获取行数。