【问题标题】:How can i insert encrypted data to sqlite. i'm getting an error while inserting encrypted data如何将加密数据插入到 sqlite。插入加密数据时出错
【发布时间】:2012-09-16 13:53:19
【问题描述】:

如何将加密数据插入到 sqlite。插入加密数据时出现错误。 bcos 加密了这么多单引号和双引号,所以在创建我的 sql 时,字符串正在中断。有没有其他方法可以插入数据而不会丢失数据。 我也害怕使用添加斜杠方法 bsoc 它可能会改变我的实际加密数据。谁能给我一个建议.. 另外请在下面找到我的插入查询功能

-(BOOL) insertItemData:(NSString *)encryptedData folderId:(NSString *)folderId
{
   bool giveBackValue = 0;

   database = [[[DBConnection alloc] init] autorelease];

  if(sqlite3_open([[database filePath] UTF8String], &db) == SQLITE_OK)
  {
    NSString *sql = [[[NSString alloc] initWithFormat:@"INSERT INTO tbl_content (FolderId, Content) VALUES ('%@', '%@');", folderId, encryptedData] autorelease];
    NSLog(@"%@",sql);
    char *sqlError;
    if(sqlite3_exec(db, [sql UTF8String], nil, nil, &sqlError) == SQLITE_OK)
    {
        giveBackValue = 1;
    }
    else
    {
        //Query exec failed

    }
}
else
{
    //DB Open failed
}

return giveBackValue;
}

我的选择查询功能

-(void)getFirstJsonListInFolder:(NSString *)folderId listCarrier:(NSMutableArray **)listCarrier
{
    database = [[[DBConnection alloc] init] autorelease];
    NSMutableArray *dummyListCarrier = [[[NSMutableArray alloc] init] autorelease];

    if (sqlite3_open([[database filePath] UTF8String], &db) ==SQLITE_OK)
    {
        NSString *sql = [[NSString alloc] initWithFormat:@"SELECT Content from tbl_content WHERE FolderId = '%@'", folderId];

    sqlite3_stmt *result;
    if(sqlite3_prepare_v2(db, [sql UTF8String], -1, &result, nil) == SQLITE_OK)
    {
        while (sqlite3_step(result) == SQLITE_ROW)
        {
            char *contentList = (char *)sqlite3_column_text(result, 0);
            NSString *contentListString = [[NSString alloc] initWithUTF8String:contentList];
            [dummyListCarrier addObject:contentListString];
            [contentListString release];
        }
    }
    else 
    {
        //Query exec failed
    }
}
else
{
    //DB Open failed
}
*listCarrier = dummyListCarrier;
}

【问题讨论】:

  • 你能告诉我们你如何将数据绑定到查询。我可以帮你
  • @CrazyCreator:- 我用我用来插入数据的插入函数更新了我的问题。请找到代码.. :)

标签: iphone objective-c ios sqlite ios5


【解决方案1】:

您应该避免直接为 sql 语句中的列赋值。相反,您应该使用准备好的语句并将值绑定到它。

NSString *sql = @"INSERT INTO tbl_content (FolderId, Content) VALUES ('?', '?');";
char *sql = (char *) [sql UTF8String];
sqlite3_bind_text(stmt, 1, [Content UTF8String], -1, SQLITE_TRANSIENT);

*这不是完整的代码

【讨论】:

  • 仍然返回0。请找到我的更新代码NSString *sql = @"INSERT INTO tbl_content (FolderId, Content) VALUES ('?', '?');"; char *sqll = (char *) [sql UTF8String]; sqlite3_stmt *sqlResult; if(sqlite3_prepare16_v2(db, sqll, -1, &sqlResult, nil) == SQLITE_OK) { sqlite3_bind_text(sqlResult, 1, [folderId UTF8String], -1, SQLITE_TRANSIENT); sqlite3_bind_text(sqlResult, 2, [jsonData UTF8String], -1, SQLITE_TRANSIENT); giveBackValue = 1; } else { //Query exec failed }
  • y 在绑定时使用 UTF8String,请参阅我的绑定
  • 是的,我现在得到1,这意味着数据插入成功。我也注意到插入的数据没有列出表格视图..我需要更改选择查询中的任何内容..感谢您的大力帮助..
  • 很高兴为您提供帮助。如果对您有帮助,您可以接受答案。告诉我你是如何触发选择查询的
  • :) 我用我的问题更新了我的选择查询..请看一下并指导我..
猜你喜欢
  • 1970-01-01
  • 2013-05-04
  • 2015-09-02
  • 2017-06-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多