Obtener el directorio de bases de datos de mi aplicación mediante programación
Quiero usar una base de datos "precargada" en mi aplicación. Hay un montón de preguntas sobre esto y la mayoría apuntan a este artículo de blog aquí o similares.
Hasta aquí todo bien. Sólo quiero saber si hay una mejor manera de obtener el directorio de bases de datos por defecto para que no tenga que usar algo como esto:
- En Android, compruebe si la base de datos sqlite existe falla de vez en cuando
- Por qué necesitamos onUpgrade (); Método en la clase SQLiteOpenHelper
- Mejor opción de diseño de base de datos para aplicaciones de Android con datos enormes
- Versiones de objetos en firebase
- ¿Cómo filtrar el texto de un Android ListView respaldado por un SimpleCursorAdapter?
private static String DB_PATH = "/data/data/YOUR_PACKAGE/databases/";
Quiero decir, tal vez eso se cambió en el futuro o tal vez un dispositivo o rom podría colocarlo en otro lugar … así que hay una manera de obtener esta vía de programación?
En Contexto existe un método para getDatabasePath (nombre), pero necesitas darle un nombre db existente y así … no existe todavía, quiero moverlo allí: P
- La base de datos Android está dañada, pero puede abrirse en SQLite Manager. ¿Recuperable?
- Adaptador de cursor y ejemplo sqlite
- ¿Puedo descargar un db de SQLite en / sdcard y acceder desde mi aplicación Android?
- Base de datos H2 vs SQLite en Android
- Cómo mantener la aplicación en ejecución en segundo plano? Seguir recogiendo datos?
- ¿Cómo migrar la aplicación SQLite existente a la biblioteca de persistencia de habitaciones?
- cómo crear base de datos una sola vez, a continuación, leer y escribir varias veces desde él, SQLite, OpenHelper, Android
- Androide sqlite comprobar si se ha insertado un nuevo valor
Crear un DB vacío, obtener la ruta con getDatabasePath()
, a continuación, sobrescribirlo con el suyo propio.
Solía…
String destPath = getFilesDir().getPath(); destPath = destPath.substring(0, destPath.lastIndexOf("/")) + "/databases";
Utilizado por SQLiteAssetHelper:
String path = mContext.getDatabasePath(mName).getPath();
En este momento, la base de datos no existe. Creo que la cadena sólo toma la ruta interna y agrega los modificadores adecuados. De hecho, esto parece funcionar bien:
context.getDatabasePath("a").getParentFile()
Básicamente, no es necesario tener una base de datos real creada, sólo pide una.
Puede utilizar el método getFilesDir()
o getDatabasePath
en una Activity-Class para obtener esta carpeta.
Más información aquí
Puede utilizar el método getDatabasePath en su clase Helper:
public class MyDatabase extends SQLiteAssetHelper { private static final String DATABASE_NAME = "wl.db"; private static final int DATABASE_VERSION = 1; public String databasePath = ""; public MyDatabase(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); // you can use an alternate constructor to specify a database location // (such as a folder on the sd card) // you must ensure that this folder is available and you have permission // to write to it // super(context, DATABASE_NAME, context.getExternalFilesDir(null).getAbsolutePath(), null, DATABASE_VERSION); databasePath = context.getDatabasePath("wl.db").getPath(); }
- Actualizar claves específicas con Firebase para Android
- Sube una foto a Facebook con Facebook Android SDK en Android