Файлы (изображения, PDF-документы. Word-документы .........) не являются структурированными данными и служат мало для целей сохранения в базе данных (полнотекстовый поиск (FTS), расширение для SQLite - это другоевещество).
Рекомендуемый метод заключается в сохранении некоторой ссылки на файл (например, полный путь или, возможно, имя файла (если все файлы хранятся в месте, которое можно различить по имени файла)) в базе данных.Поэтому, когда вы находите / выполняете поиск и получаете строку, вы затем используете сам файл.
Тем не менее, если размер файла в среднем составляет около 100 КБ или менее, SQLite может быть быстрее и, следовательно, с точки зрения производительности, лучшесохранить файлы в базе данных.
- Обратите внимание на 100 КБ на основе ссылки ниже.
35% быстрее, чем файловая система
Вы должны хранить файлы как BLOB (байтовые массивы).Вы читаете их в байтовый массив и на Android, предполагая, что java и что байтовый массив имеет имя my_byte_array и что база данных SQLiteDb тогда: -
ContentValues cv = new Contentvalues();
cv.put("FILE_COLUMN",my_byte_array);
........ other cv.put's for the other columns
long inserted_id = db.insert("The_Table",null,cv);
if (inserted_id < 1) {
.... code to handle row not inserted.
} else {
.... code to handle row inserted OK
}
WARNING
Файлы, размер которых превышает 2M , будет невозможно легко восстановить, поскольку Окно курсора ограничено 2M памяти.Даже 1M вполне может вызвать проблемы и может быть непригодным на некотором этапе, если приложение должно быть обратно совместимым, так как я считаю, что окна курсора были ограничены 1M (не уверен, когда).
Извлечениеиз базы данных
Для извлечения данных из BLOB вы используете метод Cursor getBlob(column_offset)
или, как правило, лучше использовать метод Cursor getColumnIndex(column_name)
для получения смещения столбца в соответствии с именем столбца,Поэтому, если курсор назван csr , тогда ** my_other_byte_array = csr.getBlob(csr.getColumnIndex(column_name));
**
Обратите внимание, что вам нужно переместить в допустимую строку перед использованием getBlob
метод.