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 に答える