2009-06-28 58 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(); 
相关问题