当前位置:  开发笔记 > 数据库 > 正文

读取和写入图像到SQLite DB供iPhone使用

如何解决《读取和写入图像到SQLiteDB供iPhone使用》经验,为你挑选了3个好方法。

我已经设置了一个SQLite DB,它当前可以NSString完美地读写.我还想将图像存储在数据库中,以后再调用它.我已经阅读了一些关于使用NSData和编码图像的内容,但我不完全确定我想要做什么的语法.任何代码片段或示例将不胜感激.

我当前的过程如下: UIImagePickerController- >用户从照片中选择图像 - > selectedImage设置为UIImageView- > 现在我想拍摄此图像并将其存储在数据库中

我应该提到这个调用最终会被调用远程服务器取代.不确定这是否会对性能产生影响.



1> Brad Larson..:

您需要将UIImageView中托管的UIImage转换为二进制BLOB,以便在SQLite中存储.为此,您可以使用以下内容:

NSData *dataForImage = UIImagePNGRepresentation(cachedImage);
sqlite3_bind_blob(yourSavingSQLStatement, 2, [dataForImage bytes], [dataForImage length], SQLITE_TRANSIENT);

这将生成图像的PNG表示形式,将其存储在NSData实例中,然后将NSData中的字节作为BLOB绑定到SQL查询中的第二个参数.如果您愿意,可以使用上面的UIImageJPEGRepresentation以该格式存储.您需要将一个BLOB列添加到SQLite数据库中的相应表中.

要检索此图像,您可以使用以下内容:

NSData *dataForCachedImage = [[NSData alloc] initWithBytes:sqlite3_column_blob(yourLoadingSQLStatement, 2) length: sqlite3_column_bytes(yourLoadingSQLStatement, 2)];       
self.cachedImage = [UIImage imageWithData:dataForCachedImage];
[dataForCachedImage release];


如果这对应用程序最有效,那么这就是要走的路.当我想要一个可以捆绑在应用程序中的单个文件时,我已经将数据存储在数据库中,该应用程序可以保存一些启动数据.它使文件系统更清洁.

2> Lounges..:

一个选项(在SQL中工作时通常首选)是将图像写入系统上的文件并将路径(或其他类型的标识符)存储在数据库中.


[link](http://www.sqlite.org/intern-v-extern-blob.html) - 比较sqlite团队自己的性能sqlite外部与内部blob存储.

3> orj..:

Apple的建议不是将BLOB存储在大于~2千字节的SQLite数据库中.

SQLite将数据库组织成页面.每页大小为4千字节.当您从SQLite数据库文件中读取数据时,它会将这些页面加载到内部页面缓存中.在iPhone上我认为这个缓存默认大小为1兆字节.这使得读取相邻记录非常快,因为它们可能已经在页面缓存中.

当SQLite将数据库记录读入内存时,它会读取整个记录及其占用的所有页面.因此,如果您的记录包含BLOB,它可能会占用很多页面,您将从缓存中弹出现有页面并将其替换为BLOB记录的页面.

如果您只是扫描并加载所有BLOBS以对它们执行某些操作(例如显示它们),这并不是那么糟糕.但是如果你说你做了一个查询,你只想获得一些与BLOB在同一行的数据,那么这个查询会比记录不包含大BLOB慢得多.

因此,您至少应将BLOB数据存储在单独的表中.例如:

CREATE TABLE blobs ( id INTEGER PRIMARY KEY, data BLOB );
CREATE TABLE photos ( id INTEGER PRIMARY KEY, name TEXT, blob_id INTEGER, 
    FOREIGN KEY(blob_id) REFERENCES blobs(id) );

或者更好的是,将BLOB数据存储为SQLite数据库之外的文件.

请注意,可以使用SQL PRAGMA语句调整页面缓存大小(如果您不使用CoreData).

推荐阅读
手机用户2402852387
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有