简体   繁体   English

如何从 Sqlite 数据库中保存和检索图像?

[英]How to Save And Retrieve Image From Sqlite Database?

I am convert the image into data and saving the Image in Database Like the following NSData *imageData = UIImagePNGRepresentation(imgView.image);我将图像转换为数据并将图像保存在数据库中,如下所示 NSData *imageData = UIImagePNGRepresentation(imgView.image);

[dataArray addObject:imageData];

And retrieve the data into image as Follows并将数据检索到图像中,如下所示

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

SQlite Code for saving: 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 Code For getting: 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 And Name Are retrieved But the image didnt displayed.已检索 ID 和名称但未显示图像。 the app terminates without any Error message.. Please let me know the Solution for this该应用程序终止而没有任何错误消息。请让我知道解决方案

I know my answer is a too late,but it might be useful for some one who view this question,usually while stroring images in sqlite database table using BLOB,that will have an affect on the performance of database and will slow down the loading of data,when records start to increase in numbers.Without using BLOB,you can save and retrieve images from database,here is the post/link that will help you out to carry on and achieve the task我知道我的回答为时已晚,但它可能对查看此问题的人有用,通常在使用 BLOB 在 sqlite 数据库表中存储图像时,这会影响数据库的性能并减慢加载数据,当记录开始增加时。不使用 BLOB,您可以从数据库中保存和检索图像,这里是帮助您进行和完成任务的帖子/链接

Hope it helps some one who are struck with images storage in database:)希望它可以帮助那些对数据库中的图像存储感到震惊的人:)

I don't see any sqlite database code there.我在那里看不到任何 sqlite 数据库代码。 If you simply wanted to pull the image out of your dataArray, you want:如果您只是想从 dataArray 中提取图像,您需要:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM