Работа с BLOВ полями в SQLite3
От: yozhik89 Украина  
Дата: 18.11.10 20:50
Оценка:
Всем привет! Возникла вот такая вот проблемка: есть у меня база данных на SQLite3 с двумя полями:
CREATE TABLE MyTable
(
name VARCHAR(10),
photo BLOB
);

Как я только не пробовал писать туда и извлекать картинку, но увы( не получилось.

Мне нужно произвести две важнейших операции:
1. Записать картинку в БД.
2. А затем в каком-то месте программы извлечь картинку из базы и отобразить на екран.

Приложение пишу на Objective-C под iPhone SDK 4.1. Помогите пожалуйста кто чем может — хорошей статьей о етом всем, примером исходника сохранения и извлечения картинки из базы данных.

Спасибо!
Извинити за мой русский:)
iphone sqlite3 blob
Re: Работа с BLOВ полями в SQLite3
От: nullptr_t  
Дата: 18.11.10 22:21
Оценка:
Здравствуйте, yozhik89, Вы писали:

код давай сюда, и я скажу что не так
Re[2]: Работа с BLOВ полями в SQLite3
От: yozhik89 Украина  
Дата: 22.11.10 09:03
Оценка:
вот рабочий исходник, вдруг кому надо будет


-(void) addToDB
{
    NSLog(@"\nCreating db");
    NSString *str = @"CREATE TABLE IF NOT EXISTS Images (image1 BLOB);";
    int res = SQLITE_ERROR;
    
    
    res = sqlite3_open([@"aa.sql" UTF8String], &database);
    res = sqlite3_exec(database, [str UTF8String], NULL, NULL, NULL);
        
    sqlite3_stmt *updStmt =nil; 
    
    const char *sql = "INSERT INTO Images (image1) VALUES (?);";
    res = sqlite3_prepare_v2(database, sql, -1, &updStmt, NULL);
    
    if(res!= SQLITE_OK)
    {
        NSLog(@"Error while creating update statement:%@", sqlite3_errmsg(database));
    }
    
    UIImage *img = [UIImage imageNamed: @"flower.png"];
    NSData *imageData = [NSData dataWithData: UIImagePNGRepresentation(img)];
    
    res = sqlite3_bind_blob(updStmt, 1, [imageData bytes], [imageData length] , SQLITE_BLOB);
    
    if((res = sqlite3_step(updStmt)) != SQLITE_DONE)
    {
        NSLog(@"Error while updating: %@", sqlite3_errmsg(database));
        sqlite3_reset(updStmt);
    } 
    
    res = sqlite3_reset(updStmt);
    res = sqlite3_close(database);
}

-(void) readFromDB
{
    NSLog(@"\nReading from db");
    
    NSString *query = @"SELECT image1 from Images";
    int res = SQLITE_ERROR;
    int len = 0;
    
    res = sqlite3_open([@"aa.sql" UTF8String], &database);
    
    sqlite3_stmt *statement;
    res = sqlite3_prepare_v2 (database, [query UTF8String], -1, &statement, nil);
    
    if (res == SQLITE_OK)
    {
        if (sqlite3_step(statement) == SQLITE_ROW)
        {
            len = sqlite3_column_bytes(statement, 0);
            NSData *imgData = [[NSData alloc] initWithBytes: sqlite3_column_blob(statement, 0) length: len];           
            
            
            UIImage *img = [[UIImage alloc] initWithData:imgData];

            self.view1.image = img;
            
        }
    }
    sqlite3_finalize(statement);
    
    res = sqlite3_close(database);
}
Извинити за мой русский:)
Re: Работа с BLOВ полями в SQLite3
От: yozhik89 Украина  
Дата: 22.11.10 09:04
Оценка:

-(void) addToDB
{
    NSLog(@"\nCreating db");
    NSString *str = @"CREATE TABLE IF NOT EXISTS Images (image1 BLOB);";
    int res = SQLITE_ERROR;
    
    
    res = sqlite3_open([@"aa.sql" UTF8String], &database);
    res = sqlite3_exec(database, [str UTF8String], NULL, NULL, NULL);
        
    sqlite3_stmt *updStmt =nil; 
    
    const char *sql = "INSERT INTO Images (image1) VALUES (?);";
    res = sqlite3_prepare_v2(database, sql, -1, &updStmt, NULL);
    
    if(res!= SQLITE_OK)
    {
        NSLog(@"Error while creating update statement:%@", sqlite3_errmsg(database));
    }
    
    UIImage *img = [UIImage imageNamed: @"flower.png"];
    NSData *imageData = [NSData dataWithData: UIImagePNGRepresentation(img)];
    
    res = sqlite3_bind_blob(updStmt, 1, [imageData bytes], [imageData length] , SQLITE_BLOB);
    
    if((res = sqlite3_step(updStmt)) != SQLITE_DONE)
    {
        NSLog(@"Error while updating: %@", sqlite3_errmsg(database));
        sqlite3_reset(updStmt);
    } 
    
    res = sqlite3_reset(updStmt);
    res = sqlite3_close(database);
}

-(void) readFromDB
{
    NSLog(@"\nReading from db");
    
    NSString *query = @"SELECT image1 from Images";
    int res = SQLITE_ERROR;
    int len = 0;
    
    res = sqlite3_open([@"aa.sql" UTF8String], &database);
    
    sqlite3_stmt *statement;
    res = sqlite3_prepare_v2 (database, [query UTF8String], -1, &statement, nil);
    
    if (res == SQLITE_OK)
    {
        if (sqlite3_step(statement) == SQLITE_ROW)
        {
            len = sqlite3_column_bytes(statement, 0);
            NSData *imgData = [[NSData alloc] initWithBytes: sqlite3_column_blob(statement, 0) length: len];           
            
            
            UIImage *img = [[UIImage alloc] initWithData:imgData];

            self.view1.image = img;
            
        }
    }
    sqlite3_finalize(statement);
    
    res = sqlite3_close(database);
}
Извинити за мой русский:)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.