0

我正在尝试更新我的 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;

 }
4

3 回答 3

2

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

NSString *query = [NSString stringWithFormat:@"UPDATE Dua SET favourite='%@' WHERE dua_id=%d ",fav,DuaId];  
于 2013-08-05T05:34:19.767 回答
0

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

1.该表可能不会出现在数据库中。

2.查询语句错误。

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

您可以通过在 else 中输入以下内容来使用错误语句找到确切的问题:

 NSAssert1(0, @"Error while inserting data. '%s'", sqlite3_errmsg(database))
于 2013-08-05T04:15:39.173 回答
0

请按以下方式尝试

-(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;
}
于 2013-08-05T04:44:52.230 回答