2012-03-16 3 views
0

Следующий код Я пишу для хранения изображения в БД.Сохранение изображения в SQLite

NSString *insertSQL = [NSString stringWithFormat: @"INSERT INTO slamDetailsTable (name, gender, phone,email,movie,abt,dob,smiley1,smily2,smily3,image) VALUES (\"%@\",\"%@\",\"%@\",\"%@\",\"%@\",\"%@\",\"%@\",\"%@\",\"%@\",\"%@\",?)", contact.name, contact.gender, contact.phone,contact.email,contact.movies,contact.abtMe,contact.dob,contact.smiley1,contact.smiley2,contact.smiley3]; 
     NSLog(@"query %@",insertSQL); 
     const char *insert_stmt = [insertSQL UTF8String]; 

     sqlite3_prepare_v2(database, insert_stmt, -1, &statement, NULL); 
     sqlite3_bind_blob(statement, 1, [contact.imageData bytes], [contact.imageData length], NULL); 
     if (sqlite3_step(statement) == SQLITE_DONE) 
     { 
      NSLog(@"Row added"); 
     } 

     else { 
      NSLog(@"Failed to add row"); 
     } 

Следующая строка Я добавляю, чтобы получить изображение.

NSData *imageDataFromDb = [[NSData alloc]initWithBytes:sqlite3_column_blob(statement, 11) length:sqlite3_column_int(statement, 11)]; 

Но. imageDataFromDb показывает 0 байт.

ответ

2

Вы не должны использовать sqlite3_column_int(), чтобы получить длину блока. Правильный вызов для использования - sqlite3_column_bytes().

Если результат является BLOB или UTF-8 строку затем sqlite3_column_bytes() подпрограмма возвращает число байтов, в этом BLOB или строки.

+0

Shoud Я использую qlite3_column_bytes() для обоих случаев? – Shreedhar

+0

@Shreedhar Насколько я могу видеть без тестирования, ваша запись выглядит нормально, это просто, когда вы читаете, вы ошиблись, если вы используете sqlite3_column_int (который попытается преобразовать ваш blob в целое число, независимо от того, который вернется) –

+0

Still imageDataFromDb, показывающий 0 байт. – Shreedhar

0

В то время как вы просили сделать что-то конкретное, я всегда обнаружил, что сохранение изображения на устройстве и сохранение имени или местоположения этого изображения в базе данных - это гораздо более эффективный способ сделать это , Хранение больших изображений в базе данных SQLite может занять много времени.

+0

Можете ли вы получить мне такой пример? – Shreedhar

+0

Не сейчас, Google, как хранить файлы на устройстве, а затем просто сохранить строку этого файла в db. Основная проблема заключается в том, что вы также можете проверить, действительно ли файл существует. Вы можете либо включить изображения в пакет приложений, либо загрузить их в самом приложении. –

Смежные вопросы