1

我正在为 iOS 开发一个使用 SQLite3 数据库的应用程序,现在我想在其中保存一些图像,我在网上搜索过人们说像这样在 SQLite3 中保存图像不是一个好主意

Blob 数据类型?

我完全不知道该怎么做,所以我在你面前描绘了我的整个情况,请告诉我该怎么做

我想在我的 SQLite 数据库中存储 79 个图像,其中大多数大小为 2kb,很少有 20 到 25 kb,所有图像在磁盘上占用 384kb,因此建议将所有图像存储在我的数据库中还是只使用链接我的图像数据库和文件系统

请尽快给我建议

4

3 回答 3

0

我同意将大型 blob 存储在数据库中可能会导致网站和其他拥有大量用户的应用程序出现性能问题。数据库资源浪费在文件系统或其他服务器可以处理的长时间操作上。

但是,使用 iPhone 应用程序,您无需担心数据库资源被浪费在 blob 上。您的应用程序将只有 1 个用户访问数据库,因此如果图像来自文件系统或 SQLite,它将同样响应。

于 2012-10-31T15:40:57.733 回答
0

好吧,我不建议将图像存储在数据库中。主要原因是这会导致您的数据库崩溃(我不会总是这么说,但是在某些情况下,我确实看到了由于存储图像而导致数据库崩溃)。

缓存图像的最佳方法是将图像保存到文档目录中。这是安全和强大的。快乐编码。:-)

于 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 回答