¿Puedo descargar un SQLite db en / sdcard y acceder desde mi aplicación de Android?

Ya descubrí que no hay forma de agrupar archivos en .apk y tenerlos en / sdcard, la mejor opción hasta ahora es descargar los archivos de gran tamaño en la primera ejecución. Encontré un tutorial que decía cómo agrupar un sqlite db con el apk y luego copiarlo para que se pueda acceder con SQLiteDatabase (duplicando así el espacio necesario y sin usar / sdcard).

http://developer.android.com/guide/topics/data/data-storage.html#db dice que todas las bases de datos DEBEN estar en / data / data / package_name / databases.

¿Eso es realmente así? ¿Hay alguna manera de engañar al framework para que abra una base de datos que se coloca en la partición / sdcard? ¿Hay alguna forma de utilizar otro envoltorio / marco java SQLite para acceder a dichas bases de datos?

Si la respuesta a lo anterior es ‘No’, ¿qué otras opciones tengo? Mis datos están muy bien representados en un modelo relacional, pero es demasiado grande, además, quiero poder actualizarlo sin la necesidad de reinstalar / actualizar toda la aplicación.

Seguro que puede. Los documentos son un poco conflictivos sobre esto ya que también dicen que no se imponen limitaciones. Creo que deberían decir que las rutas relativas son a la ubicación anterior y dbs allí SON privadas. Aquí está el código que desea:

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

Prueba esto:

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

Solo una idea:

  • puede poner su database.db en la carpeta de activos.

  • si su archivo database.db es más grande que 2Mb, el sistema no puede comprimirlo, por lo que necesita otras opciones

  • puede cambiar el nombre de su database.db, por ejemplo, database.jit o database.mp3, que no están comprimidos, ya que en la primera ejecución puede cambiarle el nombre a database.db

mira esto …

almacenar datos de aplicaciones de Android en la tarjeta SD

Comparto el próximo código. Declarar opcionesMenu Vector

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