首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在iphone中插入特殊字符的数据库问题?

在iphone中插入特殊字符的数据库问题?
EN

Stack Overflow用户
提问于 2012-10-09 20:55:06
回答 2查看 865关注 0票数 2

我是sqlite数据库和iphone开发的新手

am将数据插入数据库,格式为

代码语言:javascript
运行
复制
am insert description string is like dz 
• 500 grams Chicken breasts
• 6-8 nos. Green chillies
• 2 tblsp Coriander leaves
• 2 tblsp Mint leaves
• 12 nos. Garlic
• 8-10 nos. Almonds
• 3/4 cup Fresh cream
• 1 inch Ginger
• 1 tblsp Lemon juice
• Oil
• Salt
this is code for inserting 

-(void)insertDataToFavourites:(int)pageid111 :(NSString *)description
{
    NSLog(@"%@",description);
    const char *sqlStatement = "INSERT INTO AddFavoritenew (Id,Description) VALUES (?,?)";
    sqlite3_stmt *compiled_statement;
    if(sqlite3_prepare_v2(database, sqlStatement, -1, &compiled_statement, NULL) == SQLITE_OK)
    {
        sqlite3_bind_int(compiled_statement, 1, pageid111);
        sqlite3_bind_text(compiled_statement, 2, [description UTF8String] , -1, SQLITE_TRANSIENT);
        [ArrAddData addObject:[NSString stringWithFormat:@"%d", pageid111]];
        NSLog(@"ArrAddData record is:--> %@",ArrAddData);
    }

    if(sqlite3_step(compiled_statement) != SQLITE_DONE )
    {
        //        NSLog( @"Error: %s", sqlite3_errmsg(database) );
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Alert!"
                                                        message:@"alerady you added this sms to favorite list."
                                                       delegate:self
                                              cancelButtonTitle:@"Ok"
                                              otherButtonTitles:nil, nil];
        [alert show];
        [alert release];
    }
    else
    {
        //        NSLog( @"Insert into row id = %lld", sqlite3_last_insert_rowid(database));
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Alert!"
                                                        message:@"Data saved to Favorite."
                                                       delegate:self
                                              cancelButtonTitle:@"Ok"
                                              otherButtonTitles:nil, nil];
        [alert show];
        [alert release];
    }

    sqlite3_finalize(compiled_statement);    
}

我将上面的数据插入到数据库中,但问题是

当我显示从数据库中保存的数据时,它是否显示为

代码语言:javascript
运行
复制
• 500 grams Chicken breasts
• 6-8 nos. Green chillies
• 2 tblsp Coriander leaves
• 2 tblsp Mint leaves
• 12 nos. Garlic
• 8-10 nos. Almonds
• 3/4 cup Fresh cream
• 1 inch Ginger
• 1 tblsp Lemon juice
• Oil
• Salt

获取错误列表代码为

代码语言:javascript
运行
复制
-(void)getFavoriteList
{
    if([ArrFav count] > 0)
        [ArrFav removeAllObjects];

    ArrFav = [[NSMutableArray alloc] init];

    sqlite3_stmt *selectStatement=nil;  
    const char *sql ="SELECT Description FROM AddFavoritenew";
    int returnvalue;

    returnvalue = sqlite3_prepare_v2(database, sql, -1, &selectStatement, NULL);

    if(returnvalue==1)
    {
        NSAssert1(0, @"Error: failed to select the database with message '%s'.", sqlite3_errmsg(database));
    }

    if(returnvalue == SQLITE_OK)
    {                       
        while(sqlite3_step(selectStatement) == SQLITE_ROW)
        {   
            char *str = (char *)sqlite3_column_text(selectStatement,0);
            [ArrFav addObject:[NSString stringWithFormat:@"%s",str]];
            NSLog(@"Favorite data is:--> %s",str);
        }       
//        NSLog(@"Favorite data is:--> %@",ArrFav);
    }
}

请注意,我的数据库描述是text数据类型,....am也尝试使用varchar2数据类型

但是我想要像save data ..please这样的输出帮助我

致谢和问候

EN

回答 2

Stack Overflow用户

发布于 2012-10-09 20:59:51

初始字符串为UTF8。

您正在使用下面的代码从数据库重新创建它

代码语言:javascript
运行
复制
[ArrFav addObject:[NSString stringWithFormat:@"%s",str]];

它只是使用naive ascii ( %s格式说明符)转换str

尝试这样做,强制它使用UTF-8来解码字符串:

代码语言:javascript
运行
复制
[ArrFav addObject:[[NSString alloc] initWithCString:str encoding:NSUTF8StringEncoding]];
票数 1
EN

Stack Overflow用户

发布于 2012-10-09 21:01:45

如果你只关心符号,这是最简单的解决方案。

代码语言:javascript
运行
复制
//Convert • symbole with some different symbole that SQLite DB allowing
- (NSString *) convertToDBFormat:(NSString *)str
{
     NSString *temp = [str stringByReplacingOccuranceOfStrings:@"•" withString:@"!~!"];
    return temp;
}

//Convert back to origional format after retrieving from SQLite DB
- (NSString *) convertBackMyFormat:(NSString *)str 
{
     NSString *temp = [str stringByReplacingOccuranceOfString:@"!~!" withString:@"•"];
    return temp;
}

您可以使用不属于字符串的任何符号来代替!~!!:)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12800519

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档