2009-06-28 55 views
32

我已經發現有沒有辦法捆綁在的apk文件,並讓它們在/ SD卡,最好的辦法,到目前爲止是在第一次運行下載大型文件。我找到了一篇教程,講述如何將一個sqlite數據庫與apk捆綁在一起,然後複製它,以便可以使用SQLiteDatabase訪問它(因此需要的空間翻倍,並且根本不使用/ sdcard)。我可以下載/ sdcard上的SQLite數據庫並從我的Android應用程序訪問它嗎?

http://developer.android.com/guide/topics/data/data-storage.html#db說,所有的數據庫必須在/數據/數據/包名/數據庫。

果真如此?有沒有辦法欺騙框架打開放置在/ SD卡分區的數據庫?有沒有辦法使用另一個SQLite java包裝/框架來訪問這樣的數據庫?

如果回答上面是「不」,我有什麼其他選擇?我的數據在關係模型中表現得非常好,但它太大了,另外,我希望能夠在無需重新安裝/升級整個應用程序的情況下進行更新。

+1

你提到「我來到一個教程說如何捆綁一個sqlite數據庫與apk然後複製它..」。你有一個指向這個資源的指針嗎? – Ichorus 2010-11-04 22:37:50

+1

@Ichorus - 我想這是他可能指的是 - http://www.reigndesign.com/blog/using-your-own-sqlite-database-in-android-applications/ – 2012-11-17 15:05:04

回答

44

當然可以。這些文件有點矛盾,因爲他們也說沒有限制。我認爲他們應該說,相對路徑是上述位置,並且dbs在那裏是私人的。這裏是你想要的代碼:

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

只是一個想法:

  • ,你可以把你的database.db注入資產的文件夾。

  • 如果您database.db文件超過2MB的系統無法壓縮它更大,所以你需要另外一個選項

  • 你可以爲你database.db例如database.jit或database.mp3 - 未壓縮的,不是在第一次運行,你可以重命名爲database.db

7

試試這個:

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()); 
1

我分享下一個代碼。聲明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(); 
相關問題