1

SQLite3データベースを使用するiOS用のアプリを開発しています。画像を保存したいのですが、ネットで検索したところ、このようにSQLite3に画像を保存するのは得策ではないと言われています。

Blobデータ型?

私は何をすべきか完全に混乱しているので、私はあなたの前で私の全体の状況を描いています私に何をすべきかアドバイスしてください

SQLiteデータベースに79枚の画像を保存したいのですが、ほとんどの画像は2 kbで、20〜25 kbの画像はほとんどありません。すべての画像は、ディスク上で384 kbを使用するため、すべての画像をデータベースに保存するか、次のリンクのみを使用することをお勧めします。画像用のデータベースとファイルシステム

できるだけ早く教えてください

4

3 に答える 3

0

ええと、私はDBに画像を保存することをお勧めしません。主な理由は、dbがクラッシュする可能性があることです(常に言うわけではありませんが、画像の保存が原因でdbがクラッシュするのを実際に見た場合があります)。

画像をキャッシュする最も良い方法は、画像をドキュメントディレクトリに保存することです。それは安全で堅牢です。ハッピーコーディング。:-)

于 2012-10-31T09:41:13.020 に答える
0

私の意見では、imagePathをSQLiteに保存し、画像をドキュメントディレクトリに保存します。私も同じです。これはあなたを助けるかもしれません。

-(void)saveDataToDatabase:(NSString *)fileNameToSave
{

NSString *docsDir;
NSArray *dirPaths;
dirPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);

docsDir = [dirPaths objectAtIndex:0];
sqlite3_stmt    *statement;
NSString *databasePath = [[NSString alloc]
                          initWithString: [docsDir stringByAppendingPathComponent:
                                           @"scanner.db"]];

NSLog(@"%@",databasePath);

const char *dbpath = [databasePath UTF8String];

if (sqlite3_open(dbpath, &databaseHandle) == SQLITE_OK)
{
    NSString *insertSQL = [NSString stringWithFormat: @"Insert into IMAGEINFO (NAME,IMAGEPATH) values ('%@','%@')",@"imageFirst",fileNameToSave];
    const char *insert_stmt = [insertSQL UTF8String];
    sqlite3_prepare_v2(databaseHandle, insert_stmt, -1, &statement, NULL);
    if (sqlite3_step(statement) == SQLITE_DONE)
    {
        [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"database"];
    }
    else
    {
    }
}

}


-(void)saveImage:(NSString *)fileName:(UIImage *)imageToSave
{
NSError *error;
NSString *fileNaToSave = [NSString stringWithFormat:@"Documents/%@.png",fileName];
NSString  *pngPath = [NSHomeDirectory() stringByAppendingPathComponent:fileNaToSave];

// Write image to PNG
[UIImagePNGRepresentation(imageToSave) writeToFile:pngPath atomically:YES];
// Let's check to see if files were successfully written...
// You can try this when debugging on-device

// Create file manager
NSFileManager *fileMgr = [NSFileManager defaultManager];

// Point to Document directory
NSString *documentsDirectory = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"];

// Write out the contents of home directory to console
NSLog(@"Documents directory: %@", [fileMgr contentsOfDirectoryAtPath:documentsDirectory error:&error]);

}
于 2012-10-31T09:49:11.403 に答える
0

大きなblobをデータベースに保存すると、多くのユーザーがいるWebサイトやその他のアプリケーションのパフォーマンスの問題が発生する可能性があることに同意します。データベースリソースは、ファイルシステムまたは他のサーバーで処理できる長い操作に浪費されます。

ただし、iPhoneアプリを使用すると、データベースリソースがBLOBで浪費されることを心配する必要はありません。アプリにはデータベースにアクセスするユーザーが1人しかいないため、画像がファイルシステムまたはSQLiteからのものである場合も同様に応答します。

于 2012-10-31T15:40:57.733 に答える