Сохранение png изображения в базе данных через приложение для Android - PullRequest
0 голосов
/ 03 апреля 2019

Я хочу сохранить изображение с помощью моего разработанного приложения в мобильном устройстве, что является лучшим способом для этого.

Я пытался сохранить через sqlite, но есть ли другие варианты?

1 Ответ

0 голосов
/ 04 апреля 2019

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

Чтобы сохранить изображение, вы должны сохранить его как BLOB на основе байта [] (байтовый массив); Однако при использовании Android SDK существует ограничение, согласно которому можно извлечь только изображения размером менее 2 МБ, даже если их можно сохранить.

  • Технически вы можете хранить изображение в виде шестнадцатеричной, двоичной, восьмеричной строки, но это будет более сложным, менее эффективным и даже более ограничительным. . Так что на самом деле вы должны хранить его как BLOB не совсем факт.

Это также довольно бесполезное хранение изображений (или любых больших файлов) с SQLite или большинством структурированных баз данных, поскольку мало что можно сделать с помощью запроса данных.

Вы фактически сохраняете BLOB через SQL, используя что-то вроде: -

INSERT INTO your_table VALUES(x'00FF01EF');
  • т.е. 00 (0) - первый байт, FF (255) - второй, 01 (01) - третий .........
  • обратите внимание, что выше будет работать только для таблицы с одним столбцом

Однако удобный метод SQLiteDatabase insert выполняет преобразование байта [] в правильный SQL (шестнадцатеричная строка) от вашего имени.

Таким образом, вы обычно используете: -

ContentValues cv = new ContentValues();
cv.put("your_column",your_image_as_a_byte_array);
your_sqlitedatabase_object.insert("your_table",null,cv);

Вы извлекаете байтовый массив из Курсора (результат запроса), используя что-то вроде

your_retrieved_image_byte_array = your_cursor.getBlob(your_column_offset_as_an_int); //<<<<<<<<< CursorWindow full error if the row cannot fit into the CursorWindow which has 2MB limit

Возможно, вы захотите взглянуть на Как вставить изображение в базу данных sqlite , так как это более подробно и содержит код, который хранит как изображения, так и пути (любой из них хранится на основе размер изображения, менее 100 КБ, затем изображение сохраняется, в противном случае путь сохраняется) и дополнительно извлекает изображения в ListView. Кроме того, хотя это и не рекомендуется, это способ обойти ограничение в 2 МБ Как использовать изображения в Android SQLite, размер которых превышает ограничения CursorWindow?

...