Рекомендованный способ - сохранить изображение в виде файла, которого нет в базе данных, а затем сохранить путь или путь, достаточный для уникальной идентификации изображения в базе данных.
Чтобы сохранить изображение, вы должны сохранить его как 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?