Anand
Anand

Reputation: 1

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);

[dataArray addObject:imageData];

And retrieve the data into image as Follows

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

SQlite Code for saving:

   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:

  - (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. the app terminates without any Error message.. Please let me know the Solution for this

Upvotes: 0

Views: 9208

Answers (2)

Eshwar Chaitanya
Eshwar Chaitanya

Reputation: 697

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

Hope it helps some one who are struck with images storage in database :)

Upvotes: 1

hundreth
hundreth

Reputation: 841

I don't see any sqlite database code there. If you simply wanted to pull the image out of your dataArray, you want:

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

Upvotes: 0

Related Questions