如果返回了列,则会测试奇怪的SQLite问题

时间:2010-08-04 03:18:21

标签: iphone sqlite

我想最好的办法就是在结果中显示我正在做的代码:

这有效:

if (sqlite3_column_text(statement, 0)) {
    [marker setObject:[NSNumber numberWithInt: sqlite3_column_int(statement, 0)] forKey:@"id"];
}

对于if语句,它总是返回false:

if (sqlite3_column_int(statement, 0)) {
    [marker setObject:[NSNumber numberWithInt: sqlite3_column_int(statement, 0)] forKey:@"id"];
}

这会为列返回错误的结果:

if (sqlite3_column_text(statement, 0)) {
    [marker setObject:[NSNumber numberWithInt: sqlite3_column_text(statement, 0)] forKey:@"id"];
}

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

在尝试访问列的值之前,您应该获得返回的列数。

int count = sqlite3_column_count (statement);

调用sqlite3_column_int()时,它返回列的整数值。如果该值为零怎么办?您无法区分该列的有效零结果和空值之间的区别。您可以使用

测试列是否为空
sqlite3_column_type () == SQLITE_NULL;

此外,Obj-C不会自动转换不同的类型,因此numberWithInt: sqlite3_column_text当然会产生垃圾结果。 sqlite3_column_text()返回的是指向C字符串的指针,该字符串是字符串所在的内存中的地址。我猜你在期待它以某种方式将字符串转换为整数?这不会发生在C.