我有一个项目,在其中我创建了sqlite DB。现在我希望从Sqlite读取数据并存储在NSMutableArray
中并显示在UITableView
这是我的代码,但是当我逐步编译该程序时。这个编译跳过这一行:
if(sqlite3_prepare_v2(database1, [sqlStatement_userInfo UTF8String], -1, &compiledStatement, NULL) == SQLITE_OK)
到这一行并且不起作用:
sqlite3_close(database1);
这是我的完整代码:
/*==================================================================
METHOD FOR READING DATA FROM DATABASE
==================================================================*/
-(NSMutableArray *)readInformationFromDatabase
{
array = [[NSMutableArray alloc] init];
// Setup the database object
sqlite3 *database2;
// Open the database from the users filessytem
if(sqlite3_open([[self DatabaseSqlite] UTF8String], &database2) == SQLITE_OK)
{
// Setup the SQL Statement and compile it for faster access
//SQLIte Statement
NSString *sqlStatement =[NSString stringWithFormat:@"Select ID from Table1 where ParentID = 0"];
sqlite3_stmt *compiledStatement2;
if(sqlite3_prepare_v2(database2, [sqlStatement UTF8String], -1, &compiledStatement2, NULL) == SQLITE_OK)
{
// Loop through the results and add them to the feeds array
while(sqlite3_step(compiledStatement2) == SQLITE_ROW)
{
// Init the Data Dictionary
_OwnID = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement2, 0)];
}
}
else
{
NSLog(@"No Data Found");
}
// Release the compiled statement from memory
sqlite3_finalize(compiledStatement2);
}
sqlite3_close(database2);
ThisParentID = _OwnID;
do {
// Setup the database object
sqlite3 *database1;
// Open the database from the users filessytem
if(sqlite3_open([[self DatabaseSqlite] UTF8String], &database1) == SQLITE_OK)
{
// Setup the SQL Statement and compile it for faster access
//SQLIte Statement
NSString *sqlStatement_userInfo =[NSString stringWithFormat:@"Select * from Table1 ParentID = %@",ThisParentID];
sqlite3_stmt *compiledStatement;
if(sqlite3_prepare_v2(database1, [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 *_recordName = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 0)];
NSString *_recordID = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 1)];
NSString *_recordParentID = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 2)];
_recordBrotherID = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 3)];
NSString *_recordChildID = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 4)];
NSString *_recordType = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 5)];
NSString *_recordModified = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 6)];
ThisParentID = _recordID;
[_dataDictionary setObject:[NSString stringWithFormat:@"%@",_recordName] forKey:@"Name"];
[_dataDictionary setObject:[NSString stringWithFormat:@"%@",_recordID] forKey:@"ID"];
[_dataDictionary setObject:[NSString stringWithFormat:@"%@",_recordParentID] forKey:@"ParentID"];
[_dataDictionary setObject:[NSString stringWithFormat:@"%@",_recordBrotherID] forKey:@"BrotherID"];
[_dataDictionary setObject:[NSString stringWithFormat:@"%@",_recordChildID] forKey:@"ChildID"];
[_dataDictionary setObject:[NSString stringWithFormat:@"%@",_recordType] forKey:@"Type"];
[_dataDictionary setObject:[NSString stringWithFormat:@"%@",_recordModified] forKey:@"Modified"];
[array addObject:_dataDictionary];
}
// Release the compiled statement from memory
sqlite3_finalize(compiledStatement);
}
sqlite3_close(database1);
}
else
{
NSLog(@"NOT Found");
}
} while (![_recordBrotherID isEqualToString:@"0"]);
return array;
}
答案 0 :(得分:2)
您可能有更多机会使用SQLite包装器,如FMDB,或者更好,iActiveRecord(基于模型的包装器)。
答案 1 :(得分:1)
我的朋友在写很多行代码时应该小心。这段代码是正确的,但在这段代码中有一点错误,这个错误就在这一行:
NSString *sqlStatement_userInfo =[NSString stringWithFormat:@"Select * from Table1 ParentID = %@",ThisParentID];
用于从SQlite读取数据,您应使用此代码:
“选择*来自TableName WHERE 列= SomeValue”
所以你应该改变你的代码并写下来:
NSString *sqlStatement_userInfo =[NSString stringWithFormat:@"Select * from Table1 Where ParentID = %@",ThisParentID];
我希望这对你有所帮助。