我可以在/ sdcard上下载SQLite数据库并从我的Android应用程序访问它吗?

时间:2009-06-28 16:22:02

标签: database android sqlite download

我已经发现无法将文件捆绑在.apk中并将它们放在/ sdcard上,目前为止最好的选择是在首次运行时下载大文件。我来了一个教程,说如何将一个sqlite数据库与apk捆绑在一起,然后复制它,以便可以使用SQLiteDatabase访问它(从而使所需空间增加一倍,而不是使用/ sdcard)。

http://developer.android.com/guide/topics/data/data-storage.html#db表示所有数据库必须位于/ data / data / package_name / databases中。

真的是这样吗?有没有办法欺骗框架打开放在/ sdcard分区上的数据库?有没有办法使用另一个SQLite java包装器/框架来访问这些数据库?

如果上述答案为“否”,我还有其他选择吗?我的数据在关系模型中有很好的表现,但是太大了,而且,我希望能够更新它而无需重新安装/升级整个应用程序。

5 个答案:

答案 0 :(得分:44)

当然可以。文档对此有点矛盾,因为他们也说没有限制。我认为他们应该说相对路径是在上面的位置和dbs那里是私人的。这是您想要的代码:

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

答案 1 :(得分: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());

答案 2 :(得分:1)

只是一个想法:

  • 您可以将database.db放入资产文件夹。

  • 如果您的database.db文件大于2Mb,则系统无法压缩它,因此您需要其他一个选项

  • 您可以重命名database.db,例如database.jit或database.mp3 - 它们是未压缩的,而不是第一次运行时可以将其重命名为database.db

答案 3 :(得分:1)

答案 4 :(得分: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();