【问题标题】:Update value in sqlite iphone sdk更新sqlite iphone sdk中的值
【发布时间】:2012-07-10 01:39:58
【问题描述】:

我有一个更新表格记录的简单程序

表格是“person”,有“name”和“age”两列; 插入了一些记录,如下:

name age
tom 20
andy 30
han 25

现在我正在编写一个程序来更新表中的一行:

    NSString *database=[[NSBundle mainBundle] pathForResource:@"mytable" ofType:@"sqlite"];
    sqlite3_open([database UTF8String],&contactDB);
    NSString *text=@"andy";
    NSString *query=[NSString stringWithFormat:@"UPDATE person SET age=%d WHERE name='%@'",30,text];
    sqlite3_stmt *statement;
    sqlite3_prepare_v2(contactDB,[query UTF8String],-1,&statement,NULL);
    sqlite3_finalize(statement);
    sqlite3_close(contactDB);

程序运行正常,但数据库没有更新(我正在使用 SQLite Manager 浏览数据库)

当我尝试从数据库中读取时,它运行良好:

NSString *database=[[NSBundle mainBundle] pathForResource:@"mytable" ofType:@"sqlite"];
    sqlite3_open([database UTF8String],&contactDB);
    NSString *query1=[NSString stringWithFormat:@"SELECT * FROM person WHERE age=%d;",30];
    sqlite3_stmt *statement;
    sqlite3_prepare_v2(contactDB,[query1 UTF8String],-1,&statement,NULL);
    sqlite3_step(statement);    
    NSString *result=[[NSString alloc] initWithUTF8String:(const char *)sqlite3_column_text(statement, 0)];
    label.text=result;
    sqlite3_finalize(statement);
    sqlite3_close(contactDB);

【问题讨论】:

    标签: iphone sqlite sdk


    【解决方案1】:
     -(void)updateSetting:(NSArray *)arr
      {    
     if(sqlite3_open([databasePath UTF8String],&myDatabase)==SQLITE_OK)
      {
     sqlite3_stmt *compiledStmt;
    
      NSString *sqlStmt=[NSString stringWithFormat:@"UPDATE setting SET    flow='%@',formate='%@'  WHERE primaryKey=%i;",[arr objectAtIndex:0],[arr objectAtIndex:1],1];
      if(sqlite3_prepare_v2(myDatabase, [sqlStmt UTF8String],-1,&compiledStmt, NULL)==SQLITE_OK)    
      {
      NSLog(@"Successful update");
      }
    sqlite3_step(compiledStmt);
    sqlite3_close(myDatabase);  
      }
    
      }
    

    【讨论】:

      【解决方案2】:

      我已经遇到过这个问题。这背后的问题是您将查询作为字符串格式传递,因此您必须在查询语句的末尾使用;

      NSString *query=[NSString stringWithFormat:@"UPDATE questionbank SET age=%d WHERE name='%@';",30,text];
      

      【讨论】:

      • 你好,我相信;没关系,因为查询 SELECT * FROM ... 对我来说无论有没有 ;
      【解决方案3】:

      在执行sqlite3_step 方法之前,请进行如下检查。

      const char      *sqlQuery           = "UPDATE SETTINGS SET someFlag = 0";
      sqlite3_stmt    *insertStatement    = nil;
      int              success            = 0;
      if(sqlite3_prepare_v2(sqliteDatabase, sqlQuery, -1, &insertStatement, NULL) == SQLITE_OK)
      {
          success = sqlite3_step(insertStatement);
      
          if(insertStatement)
          {
              sqlite3_finalize(insertStatement);
          }
      
          if(success == SQLITE_ERROR)
          {
              return NO;
          }
          return YES;
      }
      return NO;
      

      这样你就可以弄清楚问题出在哪里。

      【讨论】:

      【解决方案4】:

      您需要检查您是否可以访问和打开数据库。只需将您的更新段放在这样的 if 语句中:if(sqlite3_open([databasePath UTF8String], &database) == SQLITE_OK)

      在你准备好后也尝试添加NSLog(@"%s", sqlite3_errmsg(database));,看看是否有任何错误。

      【讨论】:

      • 它很好地连接到数据库。我已经尝试从数据库中读取,它工作得很好
      【解决方案5】:

      这个问题的答案是主包中的数据库是只读的

      I can not insert data into sqlite3 file on XCode

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-05-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-10
        • 1970-01-01
        • 1970-01-01
        • 2012-05-09
        相关资源
        最近更新 更多