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

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

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

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

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

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

Solutions Collecting From Web of "Получить каталог баз данных для моего приложения программно"

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

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

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

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

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

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

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

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

Вы можете использовать метод getFilesDir() или getDatabasePath в Activity-Class, чтобы получить эту папку.
Больше информации здесь

Вы можете использовать метод getDatabasePath в классе 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(); }