1

我已经在 sqlite 中保存和检索了 IMAGE,我想对 PDF 做同样的事情(我有本地文件)......

- (void)saveImage 
{
  sqlite3_stmt *compiledStmt;
  sqlite3 *db;
  if(sqlite3_open([dbPath UTF8String], &db)==SQLITE_OK){
  NSString *insertSQL=@"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 。

4

1 回答 1

0

它是相同的。将 PDF 加载到NSData对象中。一旦你有了NSData,它就和你的图像数据一样了。

实际上,在这两种情况下(PDF 和图像),您都应该做同样的事情。获取文件的完整路径并将文件直接加载到NSData. 对于图像,没有理由创建第UIImage一个。

说了这么多,你为什么要把所有的数据都放到数据库里呢?为什么不将文件保存在文件系统中?如果有的话,将文件名存储在数据库中。将文件保存为实际文件比将它们作为 blob 存储在数据库中要高效得多。

于 2013-04-28T06:13:10.237 回答