Ограничение размера курсора в Android SQLiteDatabase

Я загружаю db из Интернета. Я сохраняю его в папке с папками данных и открываю его. Внутри db есть таблица "Объявления" с 6 полями. 2 из этих полей - BLOB. Когда я хочу читать из этой таблицы... У меня есть некоторые проблемы... Я заметил, что когда я читал строку с полем blob размером более 1 мегабайта, это вызывает исключение... "получить полевой интервал из строки 0 col 0 не удалось". если это немного blob, все в порядке... спасибо заранее:)

Ответ 1

Там существует ограничение на 1 МБ на внутренние активы из-за динамической декомпрессии; предел 1 МБ также, по-видимому, применим к Cobb blobs, но это нигде не документируется.

Как правило, вы должны избегать blobs в SQLite, поскольку они работают плохо; вместо этого сохраните данные blob как файл и сохраните местоположение файла в вашей базе данных.

Ответ 2

Чтение BLOB, которое меньше 100 КБ из базы данных SQLite, быстрее, чем чтение того же из файловой системы. Тем не менее, что-то большее, чем это лучше всего хранить на диске, со ссылкой в ​​db. Подробнее: http://www.sqlite.org/intern-v-extern-blob.html

Ответ 3

На операцию действует ограничение 1 МБ. (Я не уверен, что это за строку или за столбец в случае запросов SQLite). Ограничение связано с тем, что SQLite API взаимодействует с незавершенным процессом sqlite через систему IPC Binder/Parcel. Тот же предел применяется для значений внутри Bundle (например, Intent extras).

Буфер транзакции Binder имеет ограниченный фиксированный размер, в настоящее время 1Mb, который используется всеми транзакциями в процессе процесса.

Смотрите: http://developer.android.com/reference/android/os/TransactionTooLargeException.html

Ответ 4

Является ли запрос, который вы используете, "выбирая" указанный blob? Можете ли вы это пропустить? Если вы не можете, используете ли вы:

 blob = rs.getBlob(column) ;
 InputStream in = blob.getBinaryStream();

или

 blob.getBytes(1, lengthOblob) ;

Первый способ позволит вам прочитать кусок блоха. Второй будет иметь загруженный blob сразу.

Ответ 5

Похоже, что поддержка BLOB в Android еще не реализована...

http://www.basic4ppc.com/forum/basic4android-updates-questions/6648-support-sqlite-blob.html

Какие данные хранятся в полях BLOB? Я бы предпочел фотографии.

Я бы рекомендовал НЕ использовать BLOB. Файловая система - гораздо лучший выбор для двоичных данных.

Можете ли вы подробнее рассказать о том, чего хотите достичь в базе данных?