如何将sqlite
db中的所有值显示在UITableView
中?我的解决方案只显示一个值。这就是我尝试过的:
- (NSMutableArray *)loadData {
NSLog(@"display");
sqlite3_stmt *statement;
const char *dbpath = [_databasePath UTF8String];
arrayOfperson = [[NSMutableArray alloc]init];
if (sqlite3_open(dbpath, &_DB) == SQLITE_OK)
{
NSString *querySQL = [NSString stringWithFormat:@"SELECT * FROM iApp"];
sqlite3_stmt *statement;
const char *query_stmt = [querySQL UTF8String];
NSMutableArray *resultArray = [[NSMutableArray alloc]init];
if (sqlite3_prepare_v2(_DB,query_stmt, -1, &statement, NULL) == SQLITE_OK)
{
if (sqlite3_step(statement) == SQLITE_ROW)
{
/*
NSLog(@"%@", aname);
Results * aRv= [[Results alloc] init];
[aRv setName:aname];
NSLog(@"%@", aname);
[arrayOfperson addObject:aRv];
NSLog(@"%@ values of array",arrayOfperson );
return resultArray;
}
else{
NSLog(@"Not found");
// return nil;
}
sqlite3_reset(statement);
}
}
return arrayOfperson;
//[self.arrayOfperson reloadData];
}
答案 0 :(得分:0)
您需要仔细阅读SQLite C Documentation,其中列出了将数据提取并插入SQLite数据库所需的所有基本功能。
您的代码中似乎缺少对sqlite_column_x()
的调用,这是您用来从sqlite语句中提取数据的函数。
E.g。
while (sqlite_step(statement) != SQLITE_DONE) { // Could have while(sqlite_step(statement) == SQLITE_ROW) here...
int myInt = sqlite_column_int(statement, 0); // Get int from column 1
char *myText = sqlite_column_text(statement, 1); // Get text from column 2
MyObj *obj = [MyObj objWithNum:myInt, text:[[NSString alloc] initWitCString:myText]];
[myArray addObject:obj];
}
一旦您完成statement
,您需要致电sqlite_finalize(statement)
。同样,在您完成数据库引用后,您需要调用sqlite_close(db);
答案 1 :(得分:0)
好的,让我们这么长但很简单。
首先,你必须得到FMDatabase,如果你不想把子弹放在头脑中那么这是必须的。
一旦你完成了这个设置(如果你是初学者,那将是你大约1或2个小时,这是你的第一次),你将创建一个处理你数据库的课程。
在该课程中,您将拥有不同的加载/设置方法,一个是您现在需要的方法,它将返回您需要的NSMutableArray
个对象。
NSMutableArray *myObjects = [[NSMutableArray alloc]init];
FMResultSet *result = [db executeQuery:@"SELECT * FROM myTable"];
while ([result next]) {
MyObj *obj = [[MyObj alloc]init];
obj.intNum = [[results intForColumn:@"theNumColumn"]intValue];
obj.nsnumberNum = [results intForColumn:@"theNSNumberColumn"];
obj.theString = [results stringForColumn:@"myString"];
[myObjects addObject:obj];
}
return myObjects;
这将为您提供一个可靠的自定义对象数组,您可以将其发送到您的tableview。
必须将此数组提供给delegate
的不同datasource
和tableview
方法,以便它可以知道要显示的内容,如何显示它以及显示多少它应该显示。
从那里开始它的蛋糕。但我非常强烈建议使用FMDB,这是一个非常好的库,可以让你的生活比sqlite3更容易百倍。
(如果你希望你的生活更容易一百倍,我建议你切换到核心数据)
但不管怎样,是的: