0

我需要更新我的sqlite表。所以我写了一个这样的查询

 NSString *updateSQL = [NSString stringWithFormat: @"UPDATE LOCALPLAYLISTSONGS SET SONGNAME=\"%@\",SONGPATH=\"%@\" WHERE PLAYLISTNAME=\"%@\"",SongTitle,songPath,playlistName];

    const char *update_stmt = [updateSQL UTF8String];
    sqlite3_prepare_v2(database, update_stmt, -1, &statement, NULL);
    if (sqlite3_step(statement) == SQLITE_DONE)
    {
        status=@"song Added";
    }
    else
    {
        status=@"Error occured";
    }

问题是这总是显示状态为发生错误。我的查询有什么问题。请让我看看

谢谢

更新

    -(NSString *)UpdateLocalPlaylist :(NSString *)playlistName :(NSString *)SongTitle :  

    (NSString *)songPath
     {
         NSLog(@"passed");
         NSString *status;


    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory , NSUserDomainMask, YES);
    NSString *documentsDir = [paths objectAtIndex:0];
    NSString *dbPath=[[NSString alloc]initWithString:[documentsDir stringByAppendingPathComponent:@"LocalSongs.sqlite"]];

    NSLog(@"Database Path %@",dbPath);

    sqlite3_stmt    *statement;
    if (sqlite3_open([dbPath UTF8String], &database) == SQLITE_OK) {

        NSLog(@"open");

        NSString *updateSQL = [NSString stringWithFormat: @"UPDATE LOCALPLAYLISTSONGS SET SONGNAME=%@,SONGPATH=%@ WHERE PLAYLISTNAME=%@",SongTitle,songPath,playlistName];

        const char *update_stmt = [updateSQL UTF8String];
        sqlite3_prepare_v2(database, update_stmt, -1, &statement, NULL);
        if (sqlite3_step(statement) == SQLITE_DONE)
        {
            status=@"song Added";
        }

        else
        {
            status=@"Error occured";
        }

        return status;

    }

    else
        return @"Error Occured";

}
4

4 回答 4

1

SQL 使用单引号 (') 表示字符串,而不是双引号 (")。双引号仅用于对象名称(表、列 ...)。

于 2013-10-17T06:53:48.870 回答
0

试试这个方法...

NSString *updateSQL = [NSString stringWithFormat: @"UPDATE LOCALPLAYLISTSONGS SET
 SONGNAME='%@',SONGPATH='%@' WHERE PLAYLISTNAME='%@'",SongTitle,songPath,playlistName];
于 2013-10-17T06:42:00.807 回答
0

你试试这个:

update_stmt = nil;
    NSString *updateSQL = [NSString stringWithFormat: @"UPDATE LOCALPLAYLISTSONGS SET SONGNAME=%@,SONGPATH=%@ WHERE PLAYLISTNAME=%@",SongTitle,songPath,playlistName];
于 2013-10-17T06:48:57.840 回答
0

试试这个也让我知道

以这种格式声明您的查询(正如您之前声明的那样)

NSString *updateSQL = [NSString stringWithFormat: @"UPDATE LOCALPLAYLISTSONGS SET SONGNAME=\"%@\",SONGPATH=\"%@\" WHERE PLAYLISTNAME=\"%@\"",SongTitle,songPath,playlistName];

并添加了这样的条件来检查

if (sqlite3_prepare_v2(database, update_stmt, -1, &statement, NULL)) == SQLITE_OK)
            {
                if (sqlite3_step(statement) == SQLITE_DONE)
                {
                    status=@"song Added";
                }

                else
                {
                    status=@"Error occured";
                }
            }
于 2013-10-17T07:22:43.737 回答