在android中我写了这段代码:
public Trap getCloseTrap()
{
SQLiteDatabase db = mOpenHelper.getReadableDatabase();
Cursor cur = db.query(TRAP_TABLE, null, null, null, null, null, DISTANCE_TO_CLOSE_POINT+" ASC LIMIT 1");
Trap closeTrap = readFromCursor(cur);
cur.close();
return closeTrap;
}
在objective-c中,我尝试用这种方式做类似的事情:
- (Traps*)getCloseTrap
{
Traps *aTrap = [[Traps alloc] init];
// SELECT * FROM traps_table ORDER BY dist_to_close_point ASC LIMIT 1
NSString *sqlStatment = [NSString stringWithFormat:@"SELECT * FROM %@ ORDER BY %@ ASC LIMIT 1", TRAP_TABLE, DISTANCE_TO_CLOSE_POINT];
FMResultSet *query = [db executeQuery:sqlStatment];
while ([query next]) {
int trapID = [query intForColumn:ID];
aTrap = [self getTrap_trapID:trapID];
}
return aTrap;
}
我还没有测试过,但我知道我的Objective-c代码存在问题。
修改
修复我的代码加上现在使用FMDB。
答案 0 :(得分:1)
您在SQL中缺少ORDER BY <column_name>
。在Android中,查询构建器为您添加ORDER BY
,但使用原始SQL,您必须自己执行此操作。
sqlite3_prepare_v2()
编译SQL但不运行它。使用sqlite3_step()
运行已编译的查询。这与Android中的光标moveTo...()
相同。