iphone - 在 sqlite3_column_text 中使用列名而不是数字

标签 iphone objective-c ios sqlite

有什么方法可以使用列名而不是 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/

相关文章:

ios - 无法锁定和解锁屏幕方向

ios - 后台应用程序刷新检查,以编程方式为整个设备和 iOS 7 中的每个特定应用程序启用和禁用

ios - block 中的弱指针为零

iphone - UIScrollview 垂直和水平滚动 ios

iphone - Xcode 语法突出显示的问题

objective-c - KVO 或如何在 Swift 中监听来自外部的属性更改

ios - 直接使用 Realm 对象还是映射到对象类?

ios - Spritekit physicsBody swift 不施加冲动

ios - 自定义segue到同级 View Controller

iphone - 在循环中递减日期时发生泄漏