Добавление данных в базу данных из программы.Android - PullRequest
0 голосов
/ 01 декабря 2018

Я столкнулся со следующей ситуацией.В моей программе я должен хранить файлы в базе данных.Эта база данных содержит название статьи, в которой хранится файл и путь к файлу.Все файлы хранятся в папке «Ресурсы» и создаются вручную.Но что, если я хочу добавить файлы из самой программы.Например, чтобы создать специальный edittexts, где пользователь может написать заголовок и статьи.Как я могу сохранить эти данные?Я понимаю, как добавить заголовок, введенный пользователем, в базу данных, это легко.Но как насчет статей.Я не могу поместить их в файл, который был создан вручную, так как активы не могут хранить такие файлы.Я думал добавить все полные статьи в базу данных, но как я могу добавить файлы ресурсов в таком случае?

1 Ответ

0 голосов
/ 02 декабря 2018

Файлы (изображения, 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 метод.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...