Как использовать sqlite3_column_blob с NSData - PullRequest
1 голос
/ 18 января 2011

Как использовать sqlite3_column_blob с NSData, какой параметр мне нужно передать

В моем приложении для iPhone я хочу получить изображение, сохраненное в формате NSData, в базе данных sqlite в типе BLOB. для получения

// выберите запрос

NSString * selectQuery = [NSString stringWithFormat: @ "выбрать столбец изображения из tbl_image, где id = 1"]; NSArray * arraySelect = [база данных executeQuery: selectQuery];

// отображение изображения

NSData * imageData = [[arraySelect objectAtIndex: 0] valueForKey: @ "image_column"];
self.img3 = [UIImage imageWithData: imageData]; imageView.image = img3;

код сверху Я не могу отобразить изображение поэтому, пожалуйста, помогите и предложите

спасибо

Ответы [ 2 ]

3 голосов
/ 29 января 2016
  sqlite *database;
  sqlite3_stmt *Stmt;
  sqlite3_open([[self getDBPath] UTF8String],&database)
    - (NSString *) getDBPath
     {
       NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory , NSUserDomainMask, YES);
     NSString *documentsDir = [paths objectAtIndex:0];
       return [documentsDir stringByAppendingPathComponent:@"XXX.sqlite"];
      }

  NSData*thumbnailData;

// Вставка миниатюрных данных

  NSString *lSQL = [NSString stringWithFormat:@"insert into Table(Thumbnail1) values(?)"];

 if(sqlite3_prepare_v2(database, [lSQL UTF8String], -1, &Stmt, NULL) == SQLITE_OK)
        {
        sqlite3_bind_blob(Stmt, 1,[thumbnailData bytes], [thumbnailData length], NULL);
        sqlite3_step(Stmt);
        sqlite3_reset(Stmt);
        if(Stmt)
            sqlite3_finalize(Stmt);
        }

// Выборка миниатюрных данных

 NSString *lSQL = [NSString stringWithFormat:@"select Thumbnail1 from table"];

   if(sqlite3_prepare_v2(database, [lSQL UTF8String], -1, &Stmt, NULL) ==   SQLITE_OK)
   {
     while(sqlite3_step(Stmt) == SQLITE_ROW)
       {
         NSString *myColNameNSString = [NSString stringWithFormat:@"%s", sqlite3_column_name(Stmt)];
         if ([myColNameNSString isEqualToString:@"Thumbnail1"])
             {
                     thumbnailData = [[NSData alloc] initWithBytes:sqlite3_column_blob(Stmt) length:sqlite3_column_bytes(Stmt)];
               }
         }
    }
1 голос
/ 18 января 2011

Эй, я не знаю, каковы ваши требования к проекту.Я не буду использовать BLOB, если это не требуется.

причина в том, что вы сохраняете файл изображения в sqlite, каждый раз, когда вам нужно использовать файл, у вас есть доступ к базе данных, обрабатывать файл и использовать.что будет довольно легко и просто с точки зрения количества потоков, которые вы запускаете, если вы используете образы, непосредственно формирующие диск.подумай об этом.Удачи

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...