gpt4 book ai didi

ios - SQLite数据库无法读取列

转载 作者:行者123 更新时间:2023-11-29 03:45:31 25 4
gpt4 key购买 nike

我有一个DBManager,它正在从数据库(sqlite 文件)中获取数据。所有其他查询都很好,但这个查询似乎不起作用

-(NSArray *)readCountries{
NSLog(@"[DBManager] readCountries");
NSMutableArray *countriesArray = [[NSMutableArray alloc] init];
//open db from users filesystem
if (sqlite3_open([dbPath UTF8String], &database) == SQLITE_OK) {
const char* sql = "SELECT DISTINCT country FROM aed ORDER BY rowid";
sqlite3_stmt *statement;
if (sqlite3_prepare_v2(database, sql, -1, &statement, NULL) == SQLITE_OK) {
//loop through results
while (sqlite3_step(statement) == SQLITE_ROW) {
//read data from record
NSString *_country;
char* tmpCountry = (char*)sqlite3_column_text(statement, 1);
NSLog(@"tmpCountry = %@", [NSString stringWithUTF8String:tmpCountry]);
if (tmpCountry != NULL) {
_country = [NSString stringWithUTF8String:tmpCountry];
}else{
_country = @"n/a";
}
NSLog(@"country = %@", _country);
[countriesArray addObject:_country];
}
}
//finalize statement
sqlite3_finalize(statement);
}
//close database
sqlite3_close(database);
NSLog(@"[DBManager] countriesArray has %d objects", [countriesArray count]);
return (NSArray*)countriesArray;

}

我从日志中得到的所有信息是,我的数组有 5 个对象,这很好 - 但它不只是“n/a”...知道吗?其他查询都很好,它们大多使用 sqlite3_column_text 所以我不明白,为什么它在这里不起作用 - 也许新的眼光会有所帮助。

最佳答案

这是与 sqlite C-api 令人困惑的不一致之处。使用sqlite3_column_xxx函数时,列索引从0开始。但对于 sqlite3_bind_xxx 函数,列索引是从 1 开始的。

改变这个:

char* tmpCountry = (char*)sqlite3_column_text(statement, 1);

到:

char* tmpCountry = (char*)sqlite3_column_text(statement, 0);

顺便说一句 - 您应该将 else 语句添加到 sqlite3_opensqlite3_prepare 调用中。如果失败,您可以使用 sqlite3_errmsg 函数记录错误。

关于ios - SQLite数据库无法读取列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17799019/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com