有什么方法可以使用列名而不是 int 作为列号:(char*)sqlite3_column_text(statement, 1)
这就是我现在做的:
sqlite3 *db = [MyAppDelegate getNewDBConnection];
sqlite3_stmt *statement = nil;
const char *sql = "select * from foo f join bar b on b.id = f.id;";
if(sqlite3_prepare_v2(db, sql, -1, &statement, NULL) != SQLITE_OK)
NSAssert1(0,@"Error preparing statement %s", sqlite3_errmsg(db));
else
{
while(sqlite3_step(statement) == SQLITE_ROW) {
[lorem addObject:[NSString stringWithFormat:@"%s",(char*)sqlite3_column_text(statement, 1)]];
[ipsum addObject:[NSString stringWithFormat:@"%s",(char*)sqlite3_column_text(statement, 7)]];
}
sqlite3_finalize(statement);
}
但理想情况下我会做 (char*)sqlite3_column_text(statement, SomeColumn)
最佳答案
首先,看看 Objective-C 的 FMDB 包装器,它将为您节省大量原始 SQLite 编码。 (FMDB 信息:http://gusmueller.com/blog/archives/2008/06/new_home_for_fmdb.html)
我不知道有什么方法可以传递列名。但是,如果您更改 SQL 并在其中命名列而不是“select *”,它会简化事情并变得更健壮。
const char *sql = "select f.name, b.address, b.phone ...
访问器然后简单地传递列号 1、2、3、4... 比魔数(Magic Number) 1 和 7 好得多!
name = sqlite3_column_text(statement, 1)
address = sqlite3_column_text(statement, 2)
phone = sqlite3_column_text(statement, 3)
...
关于iphone - 在 sqlite3_column_text 中使用列名而不是数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6360972/