Note that there are some explanatory texts on larger screens.

plurals
  1. PORetrieve data from sqLite database ios iphone application
    primarykey
    data
    text
    <p>I'm building a database and i would like to retrieve specific data from objects saved in the database.</p> <p>This is the code i have:</p> <pre><code>//databaseMainViewController.m //Create and database and save data @implementation databaseMainViewController @synthesize customer, code1,code2; -(void) createTable: (NSString*)tableName withField1: (NSString*)field1 withField2: (NSString*)field2 withField3: (NSString*)field3 withField4: (NSString*)field4; { char*err; NSString*sql = [NSString stringWithFormat:@"CREATE TABLE IF NOT EXISTS '%@' ('%@'" "TEXT PRIMARY KEY, '%@'TEXT, '%@'TEXT, '%@'TEXT);", tableName, field1, field2, field3, field4]; if(sqlite3_exec(db, [sql UTF8String], NULL, NULL, &amp;err)!=SQLITE_OK){ sqlite3_close(db); NSAssert(0, @"DCould not create table"); } else { NSLog(@"table created"); } } //file path to database -(NSString*)filePath { NSArray*paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); return [[paths objectAtIndex:0]stringByAppendingPathComponent:@"bp.sql"]; } //open database -(void)openDB { if(sqlite3_open([[self filePath]UTF8String], &amp;db) !=SQLITE_OK) { sqlite3_close(db); NSAssert(0, @"Databese failed to open"); } else { NSLog(@"database opemed"); } } - (IBAction)save:(id)sender { NSString*customers = customer.text; NSString*codeOne = code1.text; NSString*codeTwo = code2.text; NSDate*theDate = [NSDate date]; NSString*sql= [NSString stringWithFormat:@"INSERT INTO summary ('theDate','customer','code1','code2')VALUES ('%@','%@','%@','%@')", theDate, customers,codeOne, codeTwo]; char*err; if(sqlite3_exec(db, [sql UTF8String], NULL, NULL, &amp;err)!=SQLITE_OK){ sqlite3_close(db); NSAssert(0, @"Could not update table"); } else { NSLog(@"table updated"); } customer.text = @""; code1.text = @""; code2.text = @""; } - (void)viewDidLoad { [self openDB]; [self createTable:@"summary" withField1:@"theDate" withField2:@"customer" withField3:@"code1" withField4:@"code2"]; [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. } </code></pre> <p>Then I have code to retrieve data and put them in a main list</p> <pre><code>#import "databaseFlipsideViewController.h" #import "detailViewController.h" @interface databaseFlipsideViewController () @end @implementation databaseFlipsideViewController @synthesize entries; //file path to database -(NSString*)filePath { NSArray*paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); return [[paths objectAtIndex:0]stringByAppendingPathComponent:@"bp.sql"]; } //open database -(void)openDB { if(sqlite3_open([[self filePath]UTF8String], &amp;db) !=SQLITE_OK) { sqlite3_close(db); NSAssert(0, @"Databese failed to open"); } else { NSLog(@"database opemed"); } } - (void)viewDidLoad { entries = [[NSMutableArray alloc]init]; [self openDB]; NSString*sql = [NSString stringWithFormat:@"SELECT * FROM summary"]; sqlite3_stmt*statement; if (sqlite3_prepare_v2(db, [sql UTF8String], -1, &amp;statement, nil)==SQLITE_OK) { while (sqlite3_step(statement)==SQLITE_ROW) { char*field1 = (char*)sqlite3_column_text(statement, 0); NSString*field1Str = [[NSString alloc]initWithUTF8String:field1]; char*field2 = (char*)sqlite3_column_text(statement, 1); NSString*field2Str = [[NSString alloc]initWithUTF8String:field2]; char*field3 = (char*)sqlite3_column_text(statement, 2); NSString*field3Str = [[NSString alloc]initWithUTF8String:field3]; char*field4 = (char*)sqlite3_column_text(statement, 3); NSString*field4Str = [[NSString alloc]initWithUTF8String:field4]; NSString*str = [[NSString alloc]initWithFormat:@"%@", field2Str ]; [entries addObject:str]; } } [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } #pragma mark - Actions - (IBAction)done:(id)sender { [self.delegate flipsideViewControllerDidFinish:self]; } -(NSInteger)numberOfSectionsInTableView:(UITableView*)tableView { //Return the number of sections return 1; } -(NSString*)tableView:(UITableView*)tableView titleForHeaderInSection:(NSInteger)section { NSString*myTitle = [[NSString alloc]initWithFormat:@"History"]; return myTitle; } -(NSInteger)tableView:(UITableView*)tableView numberOfRowsInSection:(NSInteger)section{ return [entries count]; NSLog(@"%d",[entries count]); } -(UITableViewCell*)tableView:(UITableView*)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { NSLog(@"test"); static NSString*cellIdentifier = @"Cell"; UITableViewCell*cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier forIndexPath:indexPath]; cell.textLabel.text = [self.entries objectAtIndex:indexPath.row]; return cell; } </code></pre> <p>And after this I have a problem, because when i click at one of the names out of the list, the application goes to another view with details about the name. But the details by every name are the same.</p> <p>This is the code for the detailViewController:</p> <pre><code>#import "detailViewController.h" @interface detailViewController () @end @implementation detailViewController @synthesize customerLabel,code1Label,code2Label,dateLabel; //file path to database -(NSString*)filePath { NSArray*paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); return [[paths objectAtIndex:0]stringByAppendingPathComponent:@"bp.sql"]; } //open database -(void)openDB { if(sqlite3_open([[self filePath]UTF8String], &amp;db) !=SQLITE_OK) { sqlite3_close(db); NSAssert(0, @"Databese failed to open"); } else { NSLog(@"database opemed"); } } - (IBAction)back:(id)sender { [self.delegate detailViewControllerDidFinish:self]; } - (void)viewDidLoad { [self openDB]; NSString*sql = [NSString stringWithFormat:@"SELECT * FROM summary"]; sqlite3_stmt*statement; if (sqlite3_prepare_v2(db, [sql UTF8String], -1, &amp;statement, nil)==SQLITE_OK) { while (sqlite3_step(statement)==SQLITE_ROW) { char*field1 = (char*)sqlite3_column_text(statement, 0); NSString*field1Str = [[NSString alloc]initWithUTF8String:field1]; char*field2 = (char*)sqlite3_column_text(statement, 1); NSString*field2Str = [[NSString alloc]initWithUTF8String:field2]; char*field3 = (char*)sqlite3_column_text(statement, 2); NSString*field3Str = [[NSString alloc]initWithUTF8String:field3]; char*field4 = (char*)sqlite3_column_text(statement, 3); NSString*field4Str = [[NSString alloc]initWithUTF8String:field4]; customerLabel.text = field2Str; code1Label.text = field3Str; code2Label.text =field4Str; dateLabel.text = field1Str; } } [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. } </code></pre> <p>So what is the best way to display the details from the selected object in the detail screen</p>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload