Получить каталог баз данных для моего приложения программно

Я хочу использовать "предварительно загруженную" базу данных в своем приложении. Есть много вопросов об этом, и большинство из них указывают на эту статью в блоге здесь или похожие слова.

Пока все хорошо. Я просто хочу знать, есть ли лучший способ получить каталог баз данных по умолчанию, поэтому вам не нужно использовать что-то вроде этого:

private static String DB_PATH = "/data/data/YOUR_PACKAGE/databases/";

Я имею в виду, может быть, это изменилось в будущем, или, может быть, устройство или rom могли бы разместить его в другом месте... так что есть способ получить этот путь программно?

В Context существует метод getDatabasePath (name), но вам нужно дать ему существующее имя db и хорошо... он еще не существует, я хочу его переместить: P

Ответ 1

Создайте пустой БД, найдите путь с getDatabasePath(), а затем перезапишите его своим.

Ответ 2

Я использовал...

String destPath = getFilesDir().getPath();
destPath = destPath.substring(0, destPath.lastIndexOf("/")) + "/databases";

Ответ 3

Используется SQLiteAssetHelper:

 String path = mContext.getDatabasePath(mName).getPath();

В настоящее время база данных не существует. Я думаю, что строка просто берет внутренний путь и добавляет соответствующие модификаторы. Фактически, это, кажется, работает очень хорошо:

context.getDatabasePath("a").getParentFile()

В принципе, вам не нужно создавать реальную базу данных, просто спросите ее об этом.

Ответ 4

Вы можете использовать метод getFilesDir() или getDatabasePath в классе активности для получения этой папки.
Подробнее здесь

Ответ 5

В методе Helper можно использовать метод getDatabasePath:

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