NSData UIImageJPEGRepresentation не пишет в SQLite fmdb - PullRequest
0 голосов
/ 24 января 2012

Я пытаюсь преобразовать jpeg в объект nsdata, а затем сохранить эти данные в столбце BLOB-объектов базы данных sqlite с помощью оболочки fmdb.

Например:

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-объекта возвращается ноль.Перед записью в базу данных я дважды проверил, чтобы видеть, что NSData, с которым я пишу, не был нулевым и содержал представление jpeg, и это сделал.У кого-нибудь возникает известная проблема или я просто что-то не так делаю из-за этого?

1 Ответ

1 голос
/ 24 января 2012

Эта строка:

NSString *query = [NSString stringWithFormat:@"insert into t1 values (null,?)", data ];

Всегда будет приводить к этой строке:

insert into t1 values (null,?)

Как -stringWithFormat: не понимает, что вы пытаетесь привязать данные к «?».

Похоже, у FMDatabase есть -executeQuery: метод, который принимает переменное количество аргументов. Попробуйте вместо этого:

[database executeQuery:@"insert into t1 values (null,?)", data];

Если вы вручную открываете базу данных с помощью sqlite3, есть ли исходные данные JPEG там?

Предупреждение: я получаю доступ к древнему разделу в моем мозгу, поскольку я не делал базы данных в течение нескольких лет;)

...