Soru Bir SQLite db / sdcard'ı indirebilir ve Android uygulamasından erişebilir miyim?


Dosyaları bir .apk içinde paketlemenin ve onları / sdcard'ında kullanmanın bir yolu olmadığını öğrendim, şimdiye kadarki en iyi seçenek, ilk defa büyük dosyaları indirmektir. Ben bir sqlite db apk ile paketlemek ve sonra SQLiteDatabase ile erişilebilecek şekilde kopyalamak için bir öğretici ile geldim (böylece gerekli alanı ikiye katlayarak, ve / sdcard kullanarak).

http://developer.android.com/guide/topics/data/data-storage.html#db tüm veritabanlarının / data / data / package_name / databases içinde OLMALIDIR.

Bu gerçekten öyle mi? Çerçeveyi / sdcard bölümüne yerleştirilmiş bir veritabanını açmak için kandırmanın bir yolu var mı? Bu veritabanlarına erişmek için başka bir SQLite java sarıcı / çerçeve kullanmanın bir yolu var mı?

Yukarıdakilerin cevabı 'Hayır' ise, başka seçeneklerim var mı? Verilerim ilişkisel bir modelde çok iyi temsil ediliyor, ancak sadece çok büyük, artı, tüm uygulamayı yeniden yüklemek / yükseltmek gerekmeden güncellemek istiyorum.


32
2018-06-28 16:22


Menşei


"Bir sqlite db'yi apk ile nasıl paketlediğini söyleyen bir öğreticinin karşısına geldim ve sonra kopyaladım" demiştin. Bu kaynağa bir işaretçiniz var mı? - Ichorus
@Ichorus - Bence bu onun kastettiği şey olabilir - reigndesign.com/blog/... - Abhinav Gujjar


Cevaplar:


Tabi ki yapabilirsin. Dokümanlar bununla ilgili olarak biraz çelişkilidir, çünkü hiçbir sınırlama getirilmediğini söylerler. Sanırım göreceli yolların yukarıdaki yere ve dbs orada özel olduğunu söylemek gerekir. İşte istediğiniz kod:

File dbfile = new File("/sdcard/mydb.sqlite" ); 
SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase(dbfile, null);
System.out.println("Its open? "  + db.isOpen());

44
2018-06-28 19:23



O zaman bu veritabanı dosyasına dışarıdaki tüm aktivitelerden erişebilir miyiz ??? Geleneksel olarak yapmak mümkün değildi!
Teşekkürler Adam. Ve bu izni eklemeyi unutmayın: AndroidManifest.xml içinde <uses-allow android: name = "android.permission.WRITE_EXTERNAL_STORAGE"> </ uses-allow> - Ashok Felix
@Ashik: Neden diğer etkinliklerde ona erişemediğini anlamıyorum. Çok sayıda seçeneğimiz var - açılmış SQLiteDatabase db nesnesini istediğiniz etkinliğe aktarın veya db nesnesini statik bir referansta saklayın. Bu onu kapsamalıdır. - Ashok Felix
Çalışmıyor, çalışmasını sağlamak için veritabanına / veritabanlarına (iç) klasör kopyalamak zorunda kaldım - Ali Asheer


Bunu dene:

String dir = Environment.getExternalStorageDirectory().getPath()
File dbfile = new File(dir+"/mydb.sqlite"); 
SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase(dbfile, null);
System.out.println("Its open? "  + db.isOpen());

7
2017-09-13 08:21





Sadece bir fikir:

  • database.db'nizi varlıklar klasörüne koyabilirsiniz.

  • database.db dosyanız 2Mb'den büyükse sistem sıkıştırılamıyor, başka bir seçeneğe ihtiyacınız var.

  • database.db örneğin database.jit veya database.mp3 gibi isimleri yeniden adlandırabilirsiniz - sıkıştırılmamış, ilk çalıştırmaya göre veritabanına yeniden adlandırabilirsiniz.


1
2018-03-29 12:05





Bunu kontrol et ...

SD kartta android uygulama verilerini depolamak


1
2018-04-26 17:04





Sonraki kodu paylaşıyorum. Bildirmek opcionesMenu Vector<String> 

Vector < String > opcionesMenu = new Vector< String >();
// the database is SDCard. I saw  the code to Blackberry (net.rim)
String rutaDB = "/storage/extSdCard/Android/databases/Offshore.db";


    SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase(rutaDB, null);

    Cursor cursor = db.rawQuery("SELECT Codigo, Nombre FROM Ruta ORDER BY Codigo, Nombre", null);

    if (cursor.moveToFirst())
    {
        do
        {
            opcionesMenu.add(cursor.getString(0) + " - " + cursor.getString(1));
        } while(cursor.moveToNext());
    }

    db.close();

1
2018-03-05 05:06