Note that there are some explanatory texts on larger screens.

plurals
  1. POSomething strange with my sqlite method
    text
    copied!<p>What I'm trying to do is the following:</p> <ul> <li><p>user sees a tableview populated with existing records in my db; &lt;-everything fine here</p></li> <li><p>user touches the + button to add an entry and gets another really simple view with a textfield and a button.</p></li> <li><p>in my button's IBAction method, I've used this code to message my "DbOperations" class where the insert should happen:</p> <p>DbOperations *med = [[DbOperations alloc] init]; [med InsertMedicine:self.txtMedicina.text];</p></li> <li><p>user then gets back to the tableview and can see immediately the new entry. BUT... nothing has been written into the db!</p></li> </ul> <p>This is the method for inserting the entry into the db:</p> <pre><code>- (void)InsertMedicine:(NSString *) med { //Check to see if the new medicine already exists fileMgr = [NSFileManager defaultManager]; sqlite3_stmt *stmt=nil; sqlite3 *dbase; const char *sql = "SELECT * FROM listamedicine"; BOOL response= NO; NSString *database = [self.GetDocumentDirectory stringByAppendingPathComponent:@"db.sqlite"]; sqlite3_open([database UTF8String], &amp;dbase); sqlite3_prepare_v2(dbase, sql, -1, &amp;stmt, NULL); while(sqlite3_step(stmt) == SQLITE_ROW) { if ([med caseInsensitiveCompare:[NSString stringWithUTF8String:(char *)sqlite3_column_text(stmt, 1)]] == NSOrderedSame) { response=YES; } } sqlite3_finalize(stmt); if (!response) { //Insert the new medicine sqlite3_stmt *stmt=nil; NSString *stmsql = [NSString stringWithFormat:@"INSERT INTO listamedicine (nomemedicina) VALUES (\"%@\")", med]; const char *sql2 = [stmsql UTF8String]; sqlite3_prepare_v2(dbase, sql2, -1, &amp;stmt, NULL); sqlite3_step(stmt); } else { UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Errore" message:@"La medicina che stai cercando di inserire esiste già." delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil]; [alert show]; } sqlite3_finalize(stmt); sqlite3_close(dbase); </code></pre> <p>}</p> <p>And this is the code my tableview uses to populate the cells:</p> <pre><code>- (NSMutableArray *)listMedicine { fileMgr = [NSFileManager defaultManager]; sqlite3_stmt *stmt=nil; sqlite3 *mybd=NULL; const char *sql = "SELECT * FROM listamedicine"; NSMutableArray *listaMedicine = [[NSMutableArray alloc]init]; //Open db NSString *database = [self.GetDocumentDirectory stringByAppendingPathComponent:@"db.sqlite"]; sqlite3_open([database UTF8String], &amp;mybd); sqlite3_prepare_v2(mybd, sql, -1, &amp;stmt, NULL); while(sqlite3_step(stmt) == SQLITE_ROW) { Medicina *myMedicine = [[Medicina alloc]init]; myMedicine.dataId=[[NSNumber numberWithInt:(int)sqlite3_column_int(stmt, 0)] intValue]; myMedicine.nome=[NSString stringWithUTF8String:(char *)sqlite3_column_text(stmt, 1)]; [listaMedicine addObject:myMedicine]; } sqlite3_finalize(stmt); sqlite3_close(mybd); return listaMedicine; </code></pre> <p>}</p> <p>This is located in my "DbOperations" class. The cellForRowAtIndexPath method in the tableview looks like this:</p> <pre><code>static NSString *CellIdentifier = @"CellaMedicina"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; if (cell == nil) { cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"CellaMedicina"]; } //Get the object from the array. DbOperations *med = [[DbOperations alloc] init]; self.medicine = [med listMedicine]; Medicina *medicina = [self.medicine objectAtIndex:indexPath.row]; cell.textLabel.text = medicina.nome; // Set up the cell return cell; </code></pre> <p>What am I doing wrong?</p>
 

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