Подтвердить что ты не робот

Каков максимальный размер базы данных SQLite на Android?

У меня есть SQLite db, размер которого превышает 2,6 ГБ. (ДБ содержит карты.) Этот db используется приложением RMaps. При перемещении карт в некоторые части с максимальным увеличением приложение неожиданно закрывается. Тем не менее, нет сообщения о закрытии силы, нет кнопки отчета. Итак, у меня есть идея, что это вызвано чтением блоков, которые превышают определенный предел, например. макс (целое). Поскольку RMaps просто использует простые операторы SQL, я думаю, что проблема не в RMaps, а в драйвере Android SQLite.

Существует ли ограничение на размер базы данных SQLite на Android?

(У меня есть Froyo на Nexus One, но я не думаю, что это только проблема Froyo.)

Выход журнала:

08-14 10:24:51.689 I/ActivityManager(   81): Starting activity: Intent { act=android.intent.action.SEARCH flg=0x10000000 cmp=com.robert.maps/.MainMapActivity (has extras) }
08-14 10:25:01.879 E/AndroidRuntime(12441): FATAL EXCEPTION: pool-1-thread-2
08-14 10:25:01.879 E/AndroidRuntime(12441): android.database.sqlite.SQLiteDiskIOException: disk I/O error
08-14 10:25:01.879 E/AndroidRuntime(12441):     at android.database.sqlite.SQLiteQuery.native_fill_window(Native Method)
08-14 10:25:01.879 E/AndroidRuntime(12441):     at android.database.sqlite.SQLiteQuery.fillWindow(SQLiteQuery.java:70)
08-14 10:25:01.879 E/AndroidRuntime(12441):     at android.database.sqlite.SQLiteCursor.fillWindow(SQLiteCursor.java:283)
08-14 10:25:01.879 E/AndroidRuntime(12441):     at android.database.sqlite.SQLiteCursor.getCount(SQLiteCursor.java:264)
08-14 10:25:01.879 E/AndroidRuntime(12441):     at android.database.AbstractCursor.moveToPosition(AbstractCursor.java:171)
08-14 10:25:01.879 E/AndroidRuntime(12441):     at android.database.AbstractCursor.moveToFirst(AbstractCursor.java:248)
08-14 10:25:01.879 E/AndroidRuntime(12441):     at com.robert.maps.utils.CashDatabase.getTile(CashDatabase.java:49)
08-14 10:25:01.879 E/AndroidRuntime(12441):     at org.andnav.osm.views.util.OpenStreetMapTileFilesystemProvider$7.run(OpenStreetMapTileFilesystemProvider.java:501)
08-14 10:25:01.879 E/AndroidRuntime(12441):     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1068)
08-14 10:25:01.879 E/AndroidRuntime(12441):     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:561)
08-14 10:25:01.879 E/AndroidRuntime(12441):     at java.lang.Thread.run(Thread.java:1096)
08-14 10:25:01.889 I/ActivityManager(   81): Process com.robert.maps (pid 12441) has died.
08-14 10:25:01.899 I/WindowManager(   81): WIN DEATH: Window{45131410 com.robert.maps/com.robert.maps.MainMapActivity paused=false}

SQLite db хранится на SD-карте, достаточно места.

4b9b3361

Ответ 1

Я подозреваю, что это ~ 2 гигабайта (это может быть связано с 32-разрядной архитектурой, хотя некоторые программы поставляются с поддержкой большого файла, что позволяет больше этого). К счастью, android.database.sqlite.SQLiteDatabase имеет следующий вызов API, который возвращает максимальный размер, который может увеличить база данных:

long getMaximumSize()

В конце концов вы можете захотеть взглянуть на очертание базы данных;)

Ответ 2

Максимальная длина строки или BLOB. Размер по умолчанию - 1 ГБ. Максимальный размер - 2.147483647.

Максимальное количество столбцов Размер по умолчанию - 2000 Максимальный размер - 32767

Максимальная длина SQL-запроса. Размер по умолчанию - 1 МБ. Максимальный размер - 1.073741824.

Максимальное количество таблиц в Присоединиться по умолчанию - 64 таблицы

Максимальное количество прикрепленных баз данных Значение по умолчанию - 10 Максимальный размер - 125

Максимальное количество строк в таблице Максимальный размер: 18446744073.709552765

Максимальный размер базы данных 140 тб, но это зависит от размера вашего устройства.

Ответ 3

SQlite имеет несколько ограничений (http://www.sqlite.org/limits.html), которые могут вступить в игру с любой базой данных. Вы пробовали vaccum; в этой конкретной базе данных? Он восстановит структуры. У вас может быть некоторый уровень коррупции или вы попали в один из других скомпилированных ограничений, которые существуют, чтобы гарантировать, что БД не станет эксплоитным вектором.

Ответ 4

Я изо всех сил пытался получить достоверную информацию об этом, но есть так много переменных. Это демонстрационное приложение Xamarin позволяет вам добавить пример вашего собственного объекта JSON в базу данных SQLite так быстро, как вы хотите, пока не остановите его. Позволяет просматривать эффекты как по размеру базы данных, так и по производительности приложения. Это грубо, но хорошо служит моим целям и, надеюсь, это может помочь кому-то другому, или вы можете расширить его. Вы можете найти здесь.