Как хранить и извлекать массив байтов (данные изображения) в базу данных SQLite и из нее?

Как хранить и извлекать массив байтов (данные изображения) в базу данных SQLite и из нее в Android?


person Alex    schedule 16.11.2010    source источник
comment
Если ничего особенного не предпринимается, то БД хранится во внутренней памяти устройства. Таким образом, вы получите около 30-60 МБ свободного места для использования вашей БД. Если вы планируете хранить много изображений нормального размера (несколько мегапикселей), то вам, вероятно, следует хранить изображения на SDCard в виде файлов и указать путь к файлу в вашей БД.   -  person Vit Khudenko    schedule 16.11.2010


Ответы (1)


Массив байтов может храниться как тип данных BLOB. В этой процедуре нет ничего особенного, кроме особого внимания к фрагментации, например:

InputStream is = context.getResources().open(R.drawable.MyImageFile);
try {
    byte[] buffer = new byte[CHUNK_SIZE];
    int size = CHUNK_SIZE;
    while(size == CHUNK_SIZE) {
        size = is.read(buffer);  //read chunks from file
        if (size == -1) break;

        ContentValues cv = new ContentValues();
        cv.put(CHUNK, buffer);       //CHUNK blob type field of your table

        long rawId = database.insert(TABLE, null, cv); //TABLE table name
    }
} catch (Exception e) {
    Log.e(TAG, "Error saving raw image to: "+rawId, e);
}
person Barmaley    schedule 22.11.2010
comment
@gevorg зачем нужны фрагменты? - person SadeepDarshana; 23.07.2016
comment
@barmaley Все фрагменты добавляются в один большой двоичный объект в одной записи (то есть вы получаете один последний большой двоичный объект, содержащий все изображение) или для каждого фрагмента создается несколько записей? (как в этом коде) - person SadeepDarshana; 23.07.2016
comment
Ответ @SadeepDarshana не мой, я просто исправил форматирование кода. - person gevorg; 23.07.2016