2012-08-17 42 views
0

我有一个保存按钮的应用程序。当我点击保存按钮时,应用程序应该自动更新一行的值并将其设置为YES。使用Xcode更新Sqlite数据库的字段值

直到现在我有以下代码,但它实际上并没有工作。请记住,我的应用程序是一个标签菜单应用程序。在第一个视图中,我有表格单元格,点击时我转到另一个视图控制器,一个详细视图控制器,其中存在按钮。

当我点击按钮时,数据库中'Fav'字段的值应该从NO更改为YES。

这是我的代码:

- (IBAction)AddButClick:(UIButton *)sender { 



    [AddBut setImage:[UIImage imageNamed:@"apple-logo copy.png"] forState:UIControlStateSelected]; 
    [AddBut setImage:[UIImage imageNamed:@"apple-logo copy.png"] forState:UIControlStateHighlighted]; 
    Favo = [[NSMutableArray alloc] initWithCapacity:1000000]; 

    // NSLog(authorNAme); 

    @try { 
     NSFileManager *fileMgr = [NSFileManager defaultManager]; 
     // NSString *dbPath = [[[NSBundle mainBundle] resourcePath ]stringByAppendingPathComponent:@"dictionary.sqlite"]; 
     //NSString *dbPath = [[[NSBundle mainBundle] resourcePath ]stringByAppendingPathComponent:@"authorsDb2.sqlite"]; 
     //  NSString *dbPath = [[[NSBundle mainBundle] resourcePath ]stringByAppendingPathComponent:@"FinalDb.sqlite"]; 
     //NSString *dbPath = [[[NSBundle mainBundle] resourcePath ]stringByAppendingPathComponent:@"xxJuridique-FINAL-OK.sqlite"]; 



     NSString *dbPath = [[[NSBundle mainBundle] resourcePath ]stringByAppendingPathComponent:@"data.sqlite"]; 

     BOOL success = [fileMgr fileExistsAtPath:dbPath]; 
     if(!success) 
     { 
      NSLog(@"Cannot locate database file '%@'.", dbPath); 
     } 
     if(!(sqlite3_open([dbPath UTF8String], &db) == SQLITE_OK)) 
     { 
      NSLog(@"An error has occured: %@", sqlite3_errmsg(db)); 

     } 



     sqlite3_stmt *compiled_statement1; 
     if(sqlite3_open([dbPath UTF8String], &db) == SQLITE_OK) { 
      //const char *sqlStatement = 
      NSString *formatedSql = [NSString stringWithFormat:@"UPDATE Sheet1 SET Fav = 'YES' WHERE field3 = '%@' " , authorNAme2]; 

      NSLog(@"This is the query %@",formatedSql); 
      const char *sql = [formatedSql UTF8String]; 
      NSLog(@" !!!!!!!! In the middle of it !!!!!!!!!!!!"); 
      if (sqlite3_prepare_v2(db, sql, -1, &compiled_statement1, NULL) != SQLITE_OK) { 
       NSLog(@"!!!!!!!!!!!!!!!!!!!ERRRRROOOOOOORRRRRRRRR!!!!!!!!!!!!!!!!!!!!!!!!!"); 
       NSAssert1(0, @"Error: failed to prepare statement with message '%s'.", sqlite3_errmsg(db)); 
      } 
     // sqlite3_exec(db, [compiled_statement1 UTF8String], NULL, NULL, NULL); 
//sqlite3_bind_text(compiled_statement1, 1, [formatedSql UTF8String], -1, SQLITE_TRANSIENT); 


     int success = sqlite3_step(compiled_statement1); 

     sqlite3_reset(compiled_statement1); 
     if (success != SQLITE_ERROR) { 
      NSLog(@"Successfully inserted"); 
      sqlite3_last_insert_rowid(db); 
     } 
      sqlite3_finalize(compiled_statement1); 


     } 

     //   
//  BOOL success = [fileMgr fileExistsAtPath:dbPath]; 
//   
//  if(!success) 
//  { 
//   NSLog(@"Cannot locate database file '%@'.", dbPath); 
//  } 
//  if(!(sqlite3_open([dbPath UTF8String], &db) == SQLITE_OK)) 
//  { 
//   NSLog(@"An error has occured: %@", sqlite3_errmsg(db)); 
//    
//  } 


     // const char *sql = "SELECT F_Keyword FROM wordss"; 
     const char *sql = "SELECT * FROM Sheet1"; 
     NSLog(@"Successfully selected from database"); 
     sqlite3_stmt *sqlStatement; 
     if(sqlite3_prepare(db, sql, -1, &sqlStatement, NULL) != SQLITE_OK) 
     { 
      NSLog(@"Problem with prepare statement: %@", sqlite3_errmsg(db)); 


     }else{ 


      NSLog(@"Got in the else tag"); 

      while (sqlite3_step(sqlStatement)==SQLITE_ROW /*&& PAss == NO*/) { 


       NSLog(@"Got in the while tag"); 

       Author * author = [[Author alloc] init]; 
       NSLog(@"Author initialized"); 

       author.name = [NSString stringWithUTF8String:(char *) sqlite3_column_text(sqlStatement,10)]; 
       NSLog(@"Initialization ok"); 
      //  NSLog(author.name); 

       if(/*author.name == @"NO" &&*/ HighLighted == NO){ 
        //const char *sql2 = "INSERT INTO Sheet1 "; 

        [AddBut setImage:[UIImage imageNamed:@"apple-logo copy.png"] forState:UIControlStateNormal]; 
        NSLog(@"We have not selected it as fav yet"); 
        // [AddBut setSelected:NO]; //btn changes to normal state 
        NSLog(@"The button was NOt highlighted and now is"); 
        HighLighted = YES; 







        // PAss = YES; 
        // [self release]; 
        break; 


       } 

       else 
       { 

        NSLog(@"We have selected it as fav"); 

        [AddBut setImage:[UIImage imageNamed:@"apple-logo.png"] forState:UIControlStateNormal]; 
        [AddBut setSelected:NO]; //btn changes to normal state 
        NSLog(@"The button was highlighted and now is NOt"); 


        HighLighted = NO; 
        break; 

        // [self viewDidLoad]; 
        // PAss = YES; 

       } 
     //  [Favo release]; 

     //  NSLog(Favo); 

//    author.name = [NSString stringWithUTF8String:(char *) sqlite3_column_text(sqlStatement,2)]; 
//    author.title = [NSString stringWithUTF8String:(char *) sqlite3_column_text(sqlStatement,2)]; 
//    author.genre = [NSString stringWithUTF8String:(char *) sqlite3_column_text(sqlStatement, 4)]; 
//    [theauthors addObject:author]; 
      } 
     } 
    } 
    @catch (NSException *exception) { 

     NSLog(@"Problem with prepare statement: %@", sqlite3_errmsg(db)); 

    } 
    @finally { 
     // sqlite3_finalize(sqlStatement); 
     sqlite3_close(db); 

     return Favo; 
    } 
+0

看看这个http://stackoverflow.com/questions/7169966/sqlite-database-update – Tendulkar 2012-08-17 08:48:07

+0

我确实看过它,但试图将它与我自己的代码造成了一个很大的问题,根本无法工作:S可以帮助整合吗?谢谢先生 – 2012-08-17 09:18:21

+0

首先你必须复制数据库到Documents目录使用这两个函数 – Tendulkar 2012-08-17 09:19:58

回答

1

的问题是不是在添加,但点击,它实际上是在viewWillAppear中,其中我应该做的:

[self authorList2]; 
[self.tableView reloadData] ; 

为了加载可变数组,然后重新加载数据