Asheesh
Asheesh

Reputation: 581

Saving and Retrieving Images from database

I have created a file of images in DBBrowser and now i want to save images in that and then retrieve it. Here is my code-

-(void)saveListImages {
    if(sqlite3_open([[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:image] UTF8String], &database) == SQLITE_OK) {
        NSString *query = [NSString stringWithFormat:@"SELECT * FROM image where id=%i"];
        //NSLog(@";query = \n%@";, query);
        sqlite3_stmt *statement;
        if (sqlite3_prepare_v2(database, [query UTF8String], -1, &statement, nil) == SQLITE_OK) {
            while (sqlite3_step(statement) == SQLITE_ROW) {
                if (sqlite3_column_blob(statement, 0) != NULL) {
                    //NSLog(@";read a non NULL image");
                    NSData *data = [[NSData alloc] initWithBytes:sqlite3_column_blob(statement, 0) length:sqlite3_column_bytes(statement, 0)];
                    imageView.image = [UIImage imageWithData:data];

                }
                else {
                    NSLog(@";read a NULL image");
                }
            }
            sqlite3_finalize(statement);
        }
    }
    sqlite3_close(database);
}

Upvotes: 0

Views: 81

Answers (1)

Chirag Kalsariya
Chirag Kalsariya

Reputation: 256

you can't store image in database, first you convert image into NSString, and in your database image column type set to blob

- (NSString *)encodeToBase64String:(UIImage *)image {
return [UIImagePNGRepresentation(image) base64EncodedStringWithOptions:NSDataBase64EncodingEndLineWithCarriageReturn];
}

- (UIImage *)decodeBase64ToImage:(NSString *)strEncodeData {
NSData *data = [[NSData alloc]initWithBase64EncodedString:strEncodeData options:NSDataBase64DecodingIgnoreUnknownCharacters];
return [UIImage imageWithData:data];
}

Convert image into Base64String

NSString *imageString = [self encodeToBase64String:image];

  // Store base64String into Database

when required you show image in imageView, simply get image string from databse than convert into image

 imageView.image=[self decodeBase64ToImage:imageString];

Upvotes: 1

Related Questions