Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Save image data to sqlite database in iphone

I want to save image data to my sqlite database but I can't do it ...

- (void) SaveData: (Article*) article :(NSMutableArray*) rssList
{
    sqlite3_stmt *statement;

    if (sqlite3_open([self.dataBasePath UTF8String], &articlesDB) == SQLITE_OK)
    {
        NSString* sqlFormat = @"INSERT INTO ARTICLES (guid, title, summary, mainLink, pubDate, author, imageLink, body, favorites, smallImage) VALUES ('%@', '%@', '%@', '%@', '%@', '%@', '%@', '%@', '%@', ?)";
        // Correct summary.
        NSString* summary = [NSString stringWithString:article.summary];
        summary           = [summary stringByReplacingOccurrencesOfString:@"'" withString:@"''"];
        // Correct title
        NSString* title   = [NSString stringWithString:article.title];
        title             = [title stringByReplacingOccurrencesOfString:@"'" withString:@"''"];
        // Correct Body
        NSString* body    = [NSString stringWithString:article.body];
        //body              = [body stringByReplacingOccurrencesOfString:@"'" withString:@"''"];
        // Create Insert SQL query.
        NSString* insertSQL = [NSString stringWithFormat:sqlFormat, article.guid, title, summary, article.mainLink, article.pubDate, article.author, article.imageLink, body, article.favorite ? @"YES" : @"NO"];
        // Add to database.
        sqlite3_prepare_v2(articlesDB, [insertSQL UTF8String], -1, &statement, NULL);
        if (sqlite3_step(statement) == SQLITE_DONE)
        {
            // Add to list.
            [rssList addObject:article];
            // Write Log.
            NSLog( @"Article added ... " );
        } 
        else
        {
            NSLog( @"Failed to add article. Error is:  %s", sqlite3_errmsg(articlesDB) );
        }

        sqlite3_finalize(statement);
        sqlite3_close(articlesDB);
    }
}

You can see that i have query and at the end i have smallimage and value (?)

@"INSERT INTO ARTICLES (guid, title, summary, mainLink, pubDate, author, imageLink, body, favorites, smallImage) VALUES ('%@', '%@', '%@', '%@', '%@', '%@', '%@', '%@', '%@', ?)";

I have a function that must update image value somewhere in my program: In this function i select the row with image link url when i try to write a data to the last column "SMALLIMAGE" but no result ... When I open my database file with editor i see in the last row only "NULL" like my data is not saved ...

- (void) SaveSmallImage: (NSData*) imgData :(NSString*) mainUrl
{
    if (sqlite3_open([self.dataBasePath UTF8String], &articlesDB) == SQLITE_OK) 
    {
        NSString* sqliteQuery = [NSString stringWithFormat:@"SELECT * FROM ARTICLES WHERE IMAGELINK =  '%@'", mainUrl]; 
        sqlite3_stmt* statement;

        if( sqlite3_prepare_v2(articlesDB, [sqliteQuery UTF8String], -1, &statement, NULL) == SQLITE_OK ) 
        {
            sqlite3_bind_blob(statement, 9, [imgData bytes], [imgData length], SQLITE_TRANSIENT);
            sqlite3_step(statement);
        }
        else
        {
            NSLog( @"SaveBody: Failed from sqlite3_prepare_v2. Error is:  %s", sqlite3_errmsg(articlesDB) );
        }

        // Finalize and close database.
        sqlite3_finalize(statement);
        sqlite3_close(articlesDB);
    }
    else 
    {
        NSLog(@"SaveSmallImage: Failed from sqlite3_open. Error is: %s", sqlite3_errmsg(articlesDB) );
    }
}

Who can tell me what I do wrong ...

like image 395
Viktor Apoyan Avatar asked Feb 18 '11 09:02

Viktor Apoyan


1 Answers

Or how can i update blob data ??

NSString* sqliteQuery = [NSString stringWithFormat:@"UPDATE ARTICLES SET SMALLIMAGE = '?' WHERE IMAGELINK = '@%'", mainUrl];

function is:

if (sqlite3_open([self.dataBasePath UTF8String], &articlesDB) == SQLITE_OK) 
        {
            NSString* sqliteQuery = [NSString stringWithFormat:@"UPDATE ARTICLES SET SMALLIMAGE = '?' WHERE IMAGELINK = '@%'", mainUrl];    
            sqlite3_stmt* statement;

            if( sqlite3_prepare_v2(articlesDB, [sqliteQuery UTF8String], -1, &statement, NULL) == SQLITE_OK ) 
            {
                int result = sqlite3_bind_blob(statement, 9, [imgData bytes], [imgData length], NULL);
                sqlite3_step(statement);
            }
            else
            {
                NSLog( @"SaveBody: Failed from sqlite3_prepare_v2. Error is:  %s", sqlite3_errmsg(articlesDB) );
            }

            // Finalize and close database.
            sqlite3_finalize(statement);
            sqlite3_close(articlesDB);
        }
        else 
        {
            NSLog(@"SaveSmallImage: Failed from sqlite3_open. Error is: %s", sqlite3_errmsg(articlesDB) );
        }

this part of code return error 25

int result = sqlite3_bind_blob(statement, 9, [imgData bytes], [imgData length], NULL);
like image 79
Viktor Apoyan Avatar answered Nov 02 '22 08:11

Viktor Apoyan