2010-08-14 32 views
24

SQLite db boyutunun 2.6 GiB üzerinde olduğunu biliyorum. (Db haritalar içerir.) Bu db, RMaps uygulaması tarafından kullanılır. Haritaları maksimum zumla bazı parçalara taşıdığınızda, uygulama aniden kapanır. Ancak, bir güç kapatma mesajı yok, rapor düğmesi yok. Bu yüzden, belirli bir sınırın ötesindeki blokları okumaktan kaynaklandığına dair bir fikrim var. v max (int). RMaps sadece basit SQL deyimlerini kullanıyor olduğundan, sorunun RMaps'ta değil, Android SQLite sürücüsünde olduğunu düşünüyorum.Android'de maksimum SQLite veritabanı boyutu nedir?

Android'de SQLite veritabanının boyut sınırı var mı?

(Ben Nexus One üzerinde Froyo var, ama bu Froyo sadece bir sorun olduğunu düşünmüyorum.)

Giriş çıkışı: SQLite db SD kart üzerinde depolanan

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} 

, yeterli alan var.

+0

SD kartını SD kartta saklamayı deneyin – Falmarri

+0

SD kartta. Sdcard içinde –

+0

fat32 sınırı? –

cevap

10

~ 2 gigabayt olduğundan şüpheleniyorum (bazı programlar büyük dosya desteğiyle birlikte gelmesine rağmen 32 bit mimariye bağlı olabilir). içine gelebilir)

+0

2 GB, normal bir masaüstü bilgisayarında çalışan bir db için geçerli olabilir, ancak bir Android mobil cihazında sınırlı olduğunu düşünüyorum; Sınırı bilmiyorum ama benzer sorunlar yaşadım ve db'nin sdcard veya dahili depolama alanı üzerinde olması farketmez 4-6 MB civarında olduğunu tahmin ediyorum. –

+7

'getMaximumSize()' 1 TB döndürür. –

+0

Eğer sqlite dosyası android harici ise o zaman sınırın ne olacağını hiç şüphem var mı? Masaüstü ile aynı mı yoksa hala herhangi bir sınırlama var mı – Vinay

3

SQLite (http://www.sqlite.org/limits.html birkaç sınırları vardır); Eğer veritabanı Kırma işleminde içine bakmak isteyebilirsiniz Sonunda

long getMaximumSize() 

: Neyse android.database.sqlite.SQLiteDatabase veritabanı artabilir maksimum boyutu döndüren aşağıdaki API çağrısını sahiptir herhangi bir veritabanı ile oynamak. Bu veritabanını kullanarak vaccum;'u denediniz mi? Yapıları yeniden inşa edecek. Bazı yolsuzluk seviyelerine sahip olabilirsiniz veya DB'nin bir istismar vektörü olmamasını sağlamak için var olan diğer derlenmiş sınırlardan birine çarpmış olabilirsiniz.

bir dize veya BLOB Standart boyutta
9

maksimum uzunluğu 1 GB Maksimum boyut Sütunlar Standart boyutu Of 2,147483647

Maksimum sayısı 2000 Max boyutu 32767 Bir SQL Bildirimi Standart boyutu Of

Maksimum Uzunluğu 1 olduğu

olmasıdır olduğunu MB Maksimum boyut A Üyelik Varsayılan olarak Tablolarının 1,073741824

Maksimum sayısı 64 tablolar

olduğunu Ekli Veritabanları Varsayılan Of

Maksimum Sayı 10 Maksimum boyut 125

mesafesindedir Bir Tablo Max Boyutu satırların

Maksimum Sayı 18446744073,709552765

Maksimum Veritabanı Boyutu 140 tb ama o kitabın cihazın disk büyüklüğüne bağlıdır.

+0

Uygulama bu sınırlara ulaşırsa ne olur? – max

+5

Güzel bir bilgi. Bize bu bilginin kaynağını söyleyebilir misiniz? –

+1

@srv_sud http://www.sqlite.org/limits.html – Saj

1

Bu konuda sağlam bilgi almakla uğraştım ama çok fazla değişken var. Bu demo Xamarin uygulaması, kendi JSON nesnesinin bir örneğini, durdurulana kadar istediğiniz kadar hızlı bir şekilde tekrar tekrar bir SQLite veritabanına eklemenizi sağlar. Etkileri hem veritabanının büyüklüğüne hem de uygulamanın performansına göre görmenize izin verin. Bu ham ama amaçlarıma iyi hizmet veriyor ve umarım bu bir başkasına yardımcı olabilir veya üzerinde genişleyebilir. here'u bulabilirsiniz.

İlgili konular