【问题标题】:sqlite is not updating my database iOSsqlite 没有更新我的数据库 iOS
【发布时间】:2013-08-05 03:45:14
【问题描述】:

我正在尝试更新我的 sqlite 数据库,但此代码对我不起作用。 请帮我找出问题所在。

-(BOOL)StoreFavourite:(NSString*)fav :(int)DuaId
{
    NSString* mydbpath=[self pathfinder];

    const char *dbpath=[mydbpath UTF8String];
    if(sqlite3_open(dbpath,&database )==SQLITE_OK)
    {

       NSString *query = [NSString stringWithFormat:@"UPDATE Dua SET 
                       favourite=\'%@\' WHERE dua_id=%d ",fav,DuaId];

       const char *query_statement=[query UTF8String];

       if(sqlite3_prepare_v2(database, query_statement, -1, &statement, NULL)==SQLITE_OK)
       {
          while(sqlite3_step(statement) == SQLITE_DONE)
          {
              return YES;
          }
          sqlite3_finalize(statement);
       }
    }
    return YES;

 }

【问题讨论】:

  • 你检查你的数据库路径是否正确??
  • 查询:"UPDATE Dua SET favourite=\"%@\" WHERE dua_id=%d"

标签: ios sqlite sql-update


【解决方案1】:

请通过输入NSLog检查您的“mydbpath”。我认为您提供的路径不正确。
也尝试使用:

NSString *query = [NSString stringWithFormat:@"UPDATE Dua SET favourite='%@' WHERE dua_id=%d ",fav,DuaId];  

【讨论】:

    【解决方案2】:

    以下是 sqlite3_prepare_v2 != SQLITE_OK 的一些原因:

    1.该表可能不存在于数据库中。

    2.查询语句错误。

    3.查询语句中的列名错误。

    您可以通过在 else 中加入以下错误语句来找到确切的问题:

     NSAssert1(0, @"Error while inserting data. '%s'", sqlite3_errmsg(database))
    

    【讨论】:

    • '插入数据时出错。 '数据库被锁定''
    • 我想你忘记关闭数据库了。 sqlite3_close(数据库);
    【解决方案3】:

    请按以下方式尝试

    -(BOOL)StoreFavourite:(NSString*)fav :(int)DuaId
    {
        sqlite3_stmt *statement=nil;
        NSString *mydbpath=[self pathfinder];
        NSString *query;
        if(sqlite3_open([mydbpath UTF8String],&database) == SQLITE_OK)
        {
            query = [NSString stringWithFormat: @"update Dua set favourite=? where dua_id=?"];
    
            if(sqlite3_prepare_v2(database, [query UTF8String], -1, &statement, NULL)
               == SQLITE_OK)
            {
                sqlite3_bind_int(statement, 2, DuaId);
                sqlite3_bind_text(statement, 1, [fav UTF8String], -1, SQLITE_TRANSIENT);
    
                if(sqlite3_step(statement))
                {
                    return YES;
                }
                else
                {
                    return NO;
                }
    
            }
            sqlite3_finalize(statement);
        }
        sqlite3_close(database);
    
       return NO;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-17
      • 1970-01-01
      • 1970-01-01
      • 2013-04-15
      • 2016-07-30
      相关资源
      最近更新 更多