2013-04-28 3 views
1

я накопил и извлекаться IMAGE в SQLite, я хочу сделать то же самое для PDF (который у меня есть, как локальный файл) ...Сохранение и извлечение PDF и из SQLite в прошивкой

- (void)saveImage 
{ 
    sqlite3_stmt *compiledStmt; 
    sqlite3 *db; 
    if(sqlite3_open([dbPath UTF8String], &db)==SQLITE_OK){ 
    NSString *[email protected]"insert into Image(image) VALUES(?)"; 
    if(sqlite3_prepare_v2(db,[insertSQL cStringUsingEncoding:NSUTF8StringEncoding], -1, &compiledStmt, NULL) == SQLITE_OK) 
    { 
     UIImage *image = [UIImage imageNamed:@"vegextra.png"]; 
     NSData *imageData=UIImagePNGRepresentation(image); 

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

      if(sqlite3_step(compiledStmt) != SQLITE_DONE) { 
        NSLog(@"Error: %s", sqlite3_errmsg(db)); 
      } else { 
        NSLog(@"Insert into row id = %lld", (sqlite3_last_insert_rowid(db))); 
      } 

     sqlite3_finalize(compiledStmt); 
    } 
    } 
    sqlite3_close(db); 
    } 

    - (void)showImage 
    { 
     sqlite3_stmt *compiledStmt; 
     sqlite3 *db; 
     int i = 1; 
     if(sqlite3_open([dbPath UTF8String], &db)==SQLITE_OK) 
     { 
      NSString *insertSQL = [NSString stringWithFormat:@"Select image from Image Where Id = %d",i]; 
     if(sqlite3_prepare_v2(db,[insertSQL cStringUsingEncoding:NSUTF8StringEncoding], -1, &compiledStmt, NULL) == SQLITE_OK) 
      { 
      while(sqlite3_step(compiledStmt) == SQLITE_ROW) { 

      int length = sqlite3_column_bytes(compiledStmt, 0); 
      NSData *imageData = [NSData dataWithBytes:sqlite3_column_blob(compiledStmt, 0) length:length]; 

      NSLog(@"Length : %d", [imageData length]); 

       if(imageData == nil) 
         NSLog(@"No image found."); 
       else 
         imgView.image = [UIImage imageWithData:imageData]; 
     } 
     } 
     sqlite3_finalize(compiledStmt); 
     } 
     sqlite3_close(db); 
    } 

ЗДЕСЬ Я необходимо хранить и извлекать PDF так же, как изображение.

ответ

0

Это идентично. Загрузите PDF в объект NSData. Как только у вас есть NSData, он будет таким же, как и ваши данные изображения.

Фактически, в обоих случаях (PDF и изображение) вы должны делать то же самое. Получите полный путь к файлу и загрузите файл непосредственно в NSData. Для изображения нет оснований для создания UIImage.

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

+0

Как «хранить файлы в файловой системе» по сравнению с новыми основными данными «Store in External Record File»? – user523234

+0

Фактически, сохранение данных в базе данных [более эффективно, если файлы меньше, чем около 100 КБ) (http://www.sqlite.org/intern-v-extern-blob.html). –

Смежные вопросы