我正在尝试将jpeg转换为nsdata对象,然后使用fmdb包装器将该数据存储在sqlite数据库的blob列中。
e.g:
UIImage *img = [UIImage imageNamed:@"house.jpeg" ];
NSData *data = UIImageJPEGRepresentation(img, 1.0);
NSString *query = [NSString stringWithFormat:@"insert into t1 values (null,?)", data ];
创建t1的地方如下:
[database executeUpdate:@"create table t1(rowid integer primary key autoincrement, house blob)" ];
理想情况下,我可以将数据拉出并将其转换回jpeg,如下所示:
NSString *query = @"select * from t1";
FMResultSet *results = [database executeQuery:query];
while ([ results next ])
{
NSData *picData = [ results dataForColumn:@"house" ];
UIImage *housePhoto = [ UIImage imageWithData:picData ];
}
我已经将这种类型的模型用于其他数据类型,如字符串等。没有问题。在我目前的尝试中,我使用此模型与字符串列和1 blob列表。当我写入数据库时,所有字符串都存储得很好,但是当我尝试回读上面的blob列时,我为blob列返回null。在写入数据库之前,我仔细检查过,看到我写的NSData不是null,并且确实包含了一个jpeg表示。一个已知问题是否突然出现在任何人身上,或者我是否只是从外部做错了什么?
答案 0 :(得分:1)
这一行:
NSString *query = [NSString stringWithFormat:@"insert into t1 values (null,?)", data ];
总是会产生这个字符串:
insert into t1 values (null,?)
As -stringWithFormat:不明白你是在尝试将数据绑定到“?”。
看起来FMDatabase有一个-executeQuery:方法,它接受可变数量的参数。试试这个:
[database executeQuery:@"insert into t1 values (null,?)", data];
如果使用sqlite3手动打开数据库,原始JPEG数据是否存在?
警告:我正在访问我脑中的一个古老部分,因为我几年没有做数据库;)