In this database there is a table called “Menu”. I want to print this table in my ViewController but this method do not work and close the database immediately.
In DatabaseMenu.h:
@interface DatabaseMenu : NSObject {
sqlite3 *databaseMenu;
DataBaseMenu *rowMenu;
}
@property (nonatomic, assign) int ID;
@property (nonatomic, copy)NSString *descrizione;
@property (nonatomic, assign) BOOL haSubMenu;
@property (nonatomic, assign) int IDPadre;
@property (nonatomic, copy) NSString *tabelleFigli;
@property (nonatomic, assign) int ordine;
@property (nonatomic, copy) NSString *custView;
@property (nonatomic, assign) BOOL visMappa;
@property (nonatomic, copy) NSMutableArray *menuArray;
-(NSMutableArray*) loadDataFromMenu;
+(DatabaseMenu*) database;
@end
In DatabaseMenu.m
static DatabaseMenu * database;
+(DatabaseMenu*) database{
if (database==nil) {
database =[[DatabaseMenu alloc]init];
}
return database;
}
-(NSMutableArray*) loadDataFromMenu{
NSString *query = @"SELECT * FROM Menu";
sqlite3_stmt *statement;
if (sqlite3_prepare_v2(databaseMenu, [query UTF8String], -1, &statement, nil)
== SQLITE_OK) {
while (sqlite3_step(statement) == SQLITE_ROW) {
//.......
}
sqlite3_finalize(statement);
} else {
sqlite3_close(databaseMenu);
}
return self.menuArray;
}
-(id) init{ //open database
self =[super init];
if(self){
NSString *sqliteDb = [[NSBundle mainBundle]pathForResource:@"China" ofType:@"sqlite"];
if(sqlite3_open([sqliteDb UTF8String], &databaseMenu)!=SQLITE_OK){
NSLog(@"Failed to open database");
}else {
NSLog(@"open the database");
[self loadDatiFromMenu];
}
return self;
}
}
The debugger not get to enter in the while loop. Why?
What you have done is not proper way to read data from database.
After init the sqlite3 variable have to open the database first and then have to access the database like below
Here
dbPathis ivar used to store whole path pointing to the data base