Add image to sqlite3

by alex 2. May 2009 15:46

-(BOOL)addImage:(UIImage *)imageItem{

int pegId = [self getNewjm_pegID];

if (!dbOpen) {

[self openDb];

}

NSString *insertProgrammeSql = @"INSERT INTO images (image) VALUES (?)";

sqlite3_stmt *statement;

if (sqlite3_prepare_v2(database, [insertProgrammeSql cStringUsingEncoding:NSUTF8StringEncoding], -1, &statement, NULL) == SQLITE_OK) {

NSData *imageData = UIImagePNGRepresentation(pegItem.albumCover);

sqlite3_bind_blob(statement, 1, [imageData bytes], [imageData length], SQLITE_TRANSIENT);

sqlite3_step(statement);

}

[self closeDb];

return YES;

}

 

-(UIImage *)getImage{

if (!dbOpen) {

[self openDb];

}

UIImage *image = nil;

NSMutableArray *pegs = [[NSMutableArray alloc] init];

NSString *selectSql = @"SELECT image FROM images";

sqlite3_stmt *statement;

if (sqlite3_prepare_v2(database, [selectSql cStringUsingEncoding:NSUTF8StringEncoding], -1, &statement, NULL) == SQLITE_OK) {

int length = sqlite3_column_bytes(statement, 0);

NSData *imageData = [NSData dataWithBytes:sqlite3_column_blob(statement, 0 ) length:length];

UIImage *image = [UIImage imageWithData:imageData];

[pegs addObject:pegItem];

}

}

sqlite3_finalize(statement);

[self closeDb];

return image;

}

Empty Database.m/h template for sqllite3

by alex 4. March 2009 07:56

//

//  Database.h


#import <Foundation/Foundation.h>

#import <sqlite3.h>


@interface Database : NSObject {

sqlite3 *database;

NSString *dbPath;

}

 

+ (Database *)sharedDatabase;

- (void)createEditableCopyOfDatabaseIfNeeded;

- (void) openDb;

@end

 

//-----------------------------------------------------------------------------------------------------

//  Database.m


#import "Database.h"


@implementation Database

 

static Database *_sharedDatabase;

 

BOOL dbOpen = NO;

 

+ (Database *)sharedDatabase

{

if (!_sharedDatabase) {

_sharedDatabase = [[Database alloc] init];

}

return _sharedDatabase;

}

// Creates a writable copy of the bundled default database in the application Documents directory.

- (void)createEditableCopyOfDatabaseIfNeeded {

// First, test for existence.

BOOL success;

NSFileManager *fileManager = [NSFileManager defaultManager];

NSError *error;

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

NSString *documentsDirectory = [paths objectAtIndex:0];

NSString *writableDBPath = [documentsDirectory stringByAppendingPathComponent:@"iSearch.sql"];

success = [fileManager fileExistsAtPath:writableDBPath];

if (success) return;

// The writable database does not exist, so copy the default to the appropriate location.

NSString *defaultDBPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"iSearch.sql"];

success = [fileManager copyItemAtPath:defaultDBPath toPath:writableDBPath error:&error];

if (!success) {

NSLog([error localizedDescription]);

NSAssert1(0, @"Failed to create writable database file with message '%@'.", [error localizedDescription]);

}

}

 

- (void) openDb {

while (dbOpen) {

//Wait untill db will be closed from othrea thread

[NSThread sleepForTimeInterval:1];

NSLog(@"Wait untill db will be closed from other thread");

}

if (!dbOpen) {

[self createEditableCopyOfDatabaseIfNeeded];

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

NSString *documentsDirectory = [paths objectAtIndex:0];

NSString *path = [documentsDirectory stringByAppendingPathComponent:@"iSearch.sql"];

//NSLog(path);

//dbPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"database.sql"];

if (sqlite3_open([path UTF8String], &database) == SQLITE_OK) {

dbOpen = YES;

}

}

}

 

- (void) closeDb {

if (dbOpen) {

sqlite3_close(database);

dbOpen = NO;

}

}

- (NSString *) getRowString:(char *)inputStr{

if(inputStr == nil)

return @"";

else

return [NSString stringWithUTF8String:inputStr];

}

@end

 

Powered by BlogEngine.NET 1.4.5.0
Theme by Mads Kristensen