1
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    NSString *path = [documentsDirectory stringByAppendingPathComponent:@"image.sqlite"];


    if (sqlite3_open_v2([path UTF8String], &database, SQLITE_OPEN_READWRITE, NULL) == SQLITE_OK)
    {


        if(selectStmt == nil)
        {
            const char *sql = "insert into imagetb(imagename,image) Values(?,?)";
            if(sqlite3_prepare_v2(database, sql, -1, &selectStmt, NULL) != SQLITE_OK)
                //              NSAssert1(0, @"Error while creating add statement. '%s'", sqlite3_errmsg(database));
                NSLog(@"%s",sqlite3_errmsg(database));
        }



        sqlite3_bind_text(selectStmt, 1, [@"test.png" UTF8String], -1, SQLITE_TRANSIENT);

         sqlite3_bind_blob(selectStmt, 2, [data1 bytes], [data1 length], SQLITE_TRANSIENT);

        if(SQLITE_DONE != sqlite3_step(selectStmt))
            NSLog(@"get: %s",sqlite3_errmsg(database));
        else
            NSLog(@"scan data added");


    }

    //showimage
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];


    if (sqlite3_open([path UTF8String], &database) == SQLITE_OK)
    {
        const char *sql = "select * from imagetb";// LIMIT 0,100 ";// where status = 1 ";
        sqlite3_stmt *selectstatment;

        if (sqlite3_prepare_v2(database, sql, -1, &selectstatment, NULL) == SQLITE_OK)
        {
            while (sqlite3_step(selectstatment) == SQLITE_ROW)
            {

                NSString *getorgstrid = [NSString stringWithUTF8String:(char *)sqlite3_column_text(selectstatment, 0)];
                NSLog(@"id->%@",getorgstrid);

                [getid addObject:getorgstrid];

                NSString *getorgstrname = [NSString stringWithUTF8String:(char *)sqlite3_column_text(selectstatment, 1)];
                NSLog(@"name->%@",getorgstrname);
                [getname addObject:getorgstrname];


                NSData *getorgstrimage = [[NSData alloc] initWithBytes:sqlite3_column_blob(selectstatment,2)length:sqlite3_column_bytes(selectstatment, 2)];

                [getimage addObject:getorgstrimage];

            }
        }
        sqlite3_finalize(selectstatment);

    }
    //[tblorgland reloadData];

    UIImage *image1 = [UIImage imageWithData:[getimage lastObject]];

    NSLog(@"image%@",image1);

    [getImageview setImage:image1];
    [pool release];


==============================================================================

- (NSString *) getDBPath
{
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory , NSUserDomainMask, YES);
    NSString *documentsDir = [paths objectAtIndex:0];

    return [documentsDir stringByAppendingPathComponent:@"image.sqlite"];
}

- (void)viewDidLoad
{
    [super viewDidLoad];

    getid=[[NSMutableArray alloc]init];
    getname=[[NSMutableArray alloc]init];
    getimage=[[NSMutableArray alloc]init];

    [self downloadimage];
    [self makeDBCopyAsNeeded];
}
-(void)downloadimage
{
    NSLog(@"Downloading...");

    UIImage *image = [[UIImage alloc] initWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://0.tqn.com/d/graphicssoft/1/7/g/A/5/psptubezdotcom_003.png"]]];

    NSLog(@"%f,%f",image.size.width,image.size.height);


    NSString *docDir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];


    NSLog(@"%@",docDir);

    NSLog(@"saving png");
    pngFilePath = [NSString stringWithFormat:@"%@/test.png",docDir];
    data1 = [NSData dataWithData:UIImagePNGRepresentation(image)];

    img=[[UIImage alloc]initWithData:data1];



    [data1 writeToFile:pngFilePath atomically:YES];


    NSLog(@"saving jpeg");
    NSString *jpegFilePath = [NSString stringWithFormat:@"%@/test.jpeg",docDir];

    NSLog(@"jpegFilePath:%@",jpegFilePath);
    data2 = [NSData dataWithData:UIImageJPEGRepresentation(image, 1.0f)];

    [data2 writeToFile:jpegFilePath atomically:YES];

    NSLog(@"saving image done");

    [image release];


}
- (void) makeDBCopyAsNeeded
{
    BOOL success;
    NSFileManager *fileManager = [NSFileManager defaultManager];
    NSError *error;
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    NSString *writableDBPath = [documentsDirectory stringByAppendingPathComponent:@"image.sqlite"];
    success = [fileManager fileExistsAtPath:writableDBPath];

    NSString *dbPath = [self getDBPath];
    NSLog(@"%@",dbPath);

    if (success)
    {
        NSLog(@"Database Success Created");
        return;
    }
    NSString *defaultDBPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"image.sqlite"];
    success = [fileManager copyItemAtPath:defaultDBPath toPath:writableDBPath error:&error];
    if (!success)
    {
        NSLog(@"Database:->%s",sqlite3_errmsg(database));
    }
}
Sumit Mundra
  • 3,891
  • 16
  • 29
Hrushikesh Betai
  • 2,227
  • 5
  • 33
  • 63
  • You can store a path of an image into database rather storing whole image – Niru Mukund Shah Mar 07 '13 at 05:07
  • 1
    Just have look at the SO question :http://stackoverflow.com/questions/5039343/save-image-data-to-sqlite-database-in-iphone .Hope this will help you. – V-Xtreme Mar 07 '13 at 05:10
  • It is much better to write the image to the filesystem. You can reference the filename in the database. – rmaddy Mar 07 '13 at 05:14
  • S Better store the image in Document directory with some unique id as a image name for better usage.. – Ganapathy Mar 07 '13 at 05:47
  • I would store the address of the image. When you need to load the image into the UIImageView, use imageWithContentsOfFile to load the image to UIImageView – lakshmen Mar 07 '13 at 05:49

3 Answers3

1

It is not recommended to store the image data in the sqlite. But if you want to store the image data then use this link

Save image data to sqlite database in iphone

Hope this will helps you..

Community
  • 1
  • 1
Bhanu Prakash
  • 1,493
  • 8
  • 20
1

You better use caches to store your images, and use database to store their names or some unique id's

  • The caches directory can be purged. That is not a good place to store data that can't be replaced. – rmaddy Mar 07 '13 at 06:03
  • instead of storing Image data, you should used to store image name in database. so it will reduce the time of storing and fetching from DB – Apple Mar 07 '13 at 06:36
0

Just write following code in -(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingImage:(UIImage *)image editingInfo:(NSDictionary *)editingInfo: if you are getting image from gallery or Camera otherwise skip code under if (imageData != nil) and just use below code to save image in sqlite

NSData * imageData = UIImageJPEGRepresentation(image, 0.8);
    NSLog(@"Image data length== %d",imageData.length);

if (imageData != nil)
    {
        UIImage *resizedImg = [self scaleImage:[UIImage imageWithData:imageData] toSize:CGSizeMake(150.0f,150.0f)];

        NSData * imageData = UIImageJPEGRepresentation(resizedImg, 0.2);
        NSLog(@"*** Image data length after compression== %d",imageData.length);

        NSString *nameofimg=[NSString stringWithFormat:@"%@",resizedImg];

        NSString *substring=[nameofimg substringFromIndex:12];
        NSString *new=[substring substringToIndex:7];// Get image name

        NSArray *path=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);

        NSString *documentdirectory=[path objectAtIndex:0];

        NSString *newFilePath = [NSString stringWithFormat:[documentdirectory stringByAppendingPathComponent: @"/%@.png"],new];

        [imageData writeToFile:newFilePath atomically:YES];

        imgpath=[[NSString alloc]initWithString:newFilePath];
        NSLog(@"doc img in img method === %@",imgpath);
    }


     databasepath=[app getDBPath]; // i have this method in delegate
        if (sqlite3_open([databasepath UTF8String], &dbAssessor) == SQLITE_OK)
        {
            NSString *selectSql = [NSString stringWithFormat:@"insert into imagetb(imagename,image) VALUES(\"%@\",\"%@\") ;",yourImgName,imgpath];

            NSLog(@"Query : %@",selectSql);

            const char *sqlStatement = [selectSql UTF8String];
            sqlite3_stmt *query_stmt;
            sqlite3_prepare(dbAssessor, sqlStatement, -1, &query_stmt, NULL);

            if(sqlite3_step(query_stmt)== SQLITE_DONE)
            {
                NSLog(@"home image updated. :)");
                app.houseImage=imgpath;
            }
            else
            {
                UIAlertView *alert = [[UIAlertView alloc]
                                      initWithTitle:@"Sorry" message:@"Failed To Save Home Image." delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
                [alert show];
                [alert release];
            }
            sqlite3_finalize(query_stmt);
        }
        sqlite3_close(dbAssessor);
Shah Paneri
  • 729
  • 7
  • 28