【问题标题】:How to Save And Retrieve Image From Sqlite Database?如何从 Sqlite 数据库中保存和检索图像?
【发布时间】:2011-09-24 11:55:42
【问题描述】:

我正在将图像转换为数据并将图像保存在数据库中,如下所示 NSData *imageData = UIImagePNGRepresentation(imgView.image);

[dataArray addObject:imageData];

并将数据检索到图像中,如下所示

        NSData *imdata = [[tableArray objectAtIndex:indexPath.row] objectForKey:@"Image"];

用于保存的 SQlite 代码:

   if (sqlite3_open([databasePath UTF8String], &database)== SQLITE_OK)
    {
        NSString *statement;
        sqlite3_stmt *compiledstatement;
        int Id;
        NSString *Name;
        NSData *imgData;



        Id = [[recordArray objectAtIndex:0] intValue];
        Name = [recordArray objectAtIndex:1];

        imgData = [recordArray objectAtIndex:2];
        statement = [[NSString alloc]initWithFormat:@"insert into ImageTable values ('%d','%@','%@')",Id,Name,imgData] ;
        const char *sqlstatement = [statement UTF8String];

        if (sqlite3_prepare_v2(database, sqlstatement, -1, &compiledstatement, NULL)== SQLITE_OK) {
            if (SQLITE_DONE!=sqlite3_step(compiledstatement) ) {
                NSAssert1(0,@"Error when inserting  %s",sqlite3_errmsg(database));
            }
            else {

                NSLog(@"Data inserted Successfully");
            }
            //[recordDict release];
        }
        else {
            NSLog(@"Failed with error");
            NSAssert1(0,@"Error when creation %s",sqlite3_errmsg(database));

        }



    }
    //sqlite3_finalize(compiledstatement);

获取的Sqlite代码:

  - (NSMutableArray *) getRecord
     {
[self checkAndCreateDatabase];

sqlArray=[[NSMutableArray alloc]init ];


if (sqlite3_open([databasePath UTF8String], &database) == SQLITE_OK)
{
    const char *sql = "select * from ImageTable";
    sqlite3_stmt *selectstmt;
    if(sqlite3_prepare_v2(database, sql, -1, &selectstmt, NULL) == SQLITE_OK) 
    {
        while(sqlite3_step(selectstmt) == SQLITE_ROW)
        {
            //[sqlDict retain];
            sqlDict =[[NSMutableDictionary alloc]init ];

            NSString *Id = [NSString stringWithUTF8String:(char *)sqlite3_column_text(selectstmt, 0)];
            //[barcodeArray addObject:prdbcode];
            [sqlDict setObject:Id forKey:@"Id"];
            //[prdbcode release];


            NSString *name = [NSString stringWithUTF8String:(char *)sqlite3_column_text(selectstmt, 1)];
            //[nameArray addObject:prdname];
            [sqlDict setObject:name forKey:@"Name"];
            //[prdname release];


            NSData *image = [NSString stringWithUTF8String:(char *)sqlite3_column_text(selectstmt, 2)];
            //NSData *data = [[NSData alloc] initWithBytes:sqlite3_column_blob(selectstmt, 1) length:sqlite3_column_bytes(selectstmt, 1)];              
            //[descArray addObject:prdDesc];
            [sqlDict setObject:image forKey:@"Image"];
            // [prdDesc release];
            [sqlArray addObject:sqlDict];
        }


        sqlite3_finalize(selectstmt);   

    }

    sqlite3_close(database);
    //  
}

return sqlArray;

}

[imView setImage:[UIImage imageWithData:imdata]];
[cell addSubview:imView];

Id 和 Name 已检索但图像未显示。 该应用程序终止而没有任何错误消息.. 请告诉我解决方案

【问题讨论】:

标签: iphone database xcode uiimage


【解决方案1】:

我知道我的回答为时已晚,但对于查看此问题的某些人可能有用,通常在使用 BLOB 在 sqlite 数据库表中存储图像时,这会影响数据库的性能并减慢速度数据的加载,当记录开始增加时。不使用 BLOB,您可以从数据库中保存和检索图像,这里是 post/link,它将帮助您继续并完成任务

希望它可以帮助那些对数据库中的图像存储感到震惊的人:)

【讨论】:

    【解决方案2】:

    我在那里没有看到任何 sqlite 数据库代码。如果您只是想从 dataArray 中提取图像,您需要:

    NSData *imdata = [dataArray objectAtIndex:indexPath.row];
    

    【讨论】:

      猜你喜欢
      • 2012-11-30
      • 1970-01-01
      • 2013-06-28
      • 1970-01-01
      • 2018-10-16
      • 2015-08-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多