Ответ 1
Создайте пустой БД, найдите путь с getDatabasePath()
, а затем перезапишите его своим.
Я хочу использовать "предварительно загруженную" базу данных в своем приложении. Есть много вопросов об этом, и большинство из них указывают на эту статью в блоге здесь или похожие слова.
Пока все хорошо. Я просто хочу знать, есть ли лучший способ получить каталог баз данных по умолчанию, поэтому вам не нужно использовать что-то вроде этого:
private static String DB_PATH = "/data/data/YOUR_PACKAGE/databases/";
Я имею в виду, может быть, это изменилось в будущем, или, может быть, устройство или rom могли бы разместить его в другом месте... так что есть способ получить этот путь программно?
В Context существует метод getDatabasePath (name), но вам нужно дать ему существующее имя db и хорошо... он еще не существует, я хочу его переместить: P
Создайте пустой БД, найдите путь с 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
в классе активности для получения этой папки.
Подробнее здесь
В методе 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();
}