我在应用程序中使用sqlite数据库。在我的sqlite中存在10条记录。我想从该数据库中读取4个数据,并且要获取此数据,直到最后一个数据中的BroID为NULL(BroID是列数据之一),这是我的代码,但是我不知道如何在代码中使用循环,直到BroID为空值。
-(NSMutableArray *)readInformationFromDatabase
{
array = [[NSMutableArray alloc] init];
// Setup the database object
sqlite3 *database;
// Open the database from the users filessytem
if(sqlite3_open([[self dataFilePath] UTF8String], &database) == SQLITE_OK)
{
// I want to use loop for certain work!!! (this work is get name from data base until BroID to be NULL )
NSString *sqlStatement_userInfo =[NSString stringWithFormat:@"Select * from table1"];
sqlite3_stmt *compiledStatement;
if(sqlite3_prepare_v2(database, [sqlStatement_userInfo UTF8String], -1, &compiledStatement, NULL) == SQLITE_OK)
{
// Loop through the results and add them to the feeds array
while(sqlite3_step(compiledStatement) == SQLITE_ROW)
{
// Init the Data Dictionary
NSMutableDictionary *_dataDictionary=[[NSMutableDictionary alloc] init];
NSString *_userName = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 1)];
[_dataDictionary setObject:[NSString stringWithFormat:@"%@",_userName] forKey:@"Name"];
[array addObject:_dataDictionary];
}
}
else
{
NSLog(@"No Data Found");
}
请让我知道完成此代码的方法。
最佳答案
首先确定SELECT
语句:
SELECT * ...
更改为SELECT colname1, colname2, ...
,这样您就可以确定返回列的顺序,并且不必参考架构即可找出返回的顺序。这实际上节省了时间。 BroID
必须包含在所选列中。 ORDER BY
子句以获得一致的结果。 WHERE BroID IS NOT NULL
行,这可能适合您的需求。 如果仍然需要使用代码来停止获取,则只需使用以下命令从
NULL BroID
循环中测试break
列和while
:while (sqlite3_step(compiledStatement) == SQLITE_ROW)
{
// Fetch other columns
if (sqlite_column_type(compiledStatement, INDEX) == SQLITE_NULL)
break;
}
其中
INDEX
是BroID
的列索引。目前尚不清楚是否要在结果集中的
BroID IS NULL
行所在的位置;如果您不这样做,则在访存列之前不执行sqlite_column_type()
测试,否则将其保留如上。有关详细信息,请参考reference。
关于ios - 如何在sqlite中使用循环从某些列获取名称,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16621281/