从表中选择2列,查询一个

时间:2014-01-15 09:04:40

标签: android ios objective-c sqlite

在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。

1 个答案:

答案 0 :(得分:1)

  1. 您在SQL中缺少ORDER BY <column_name>。在Android中,查询构建器为您添加ORDER BY,但使用原始SQL,您必须自己执行此操作。

  2. sqlite3_prepare_v2()编译SQL但不运行它。使用sqlite3_step()运行已编译的查询。这与Android中的光标moveTo...()相同。