Каков максимальный размер базы данных SQLite на Android? - PullRequest
29 голосов
/ 14 августа 2010

У меня есть база данных SQLite, размер которой превышает 2,6 ГиБ. (БД содержит карты.) Эта база данных используется приложением 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 хранится на SD-карте, достаточно места.

Ответы [ 4 ]

16 голосов
/ 16 февраля 2015

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

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

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

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

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

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

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

11 голосов
/ 22 августа 2010

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

long getMaximumSize()

В конечном итоге вы можете захотеть посмотреть на сегментирование базы данных;)

3 голосов
/ 14 мая 2011

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

1 голос
/ 31 июля 2017

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

...