Использовать свою папку вместо "databases" в sqlite android
Есть несколько файлов бд, которые нах-ся по пути /com.example.myapplication/files/ . Как мне к ним обращаться?
Сейчас он у меня берет данные из папки databases, которая создается автоматически.
public SQLiteDatabase openDataBase() throws SQLException{
File dbFile = mCtx.getDatabasePath(DATABASE_NAME);
return SQLiteDatabase.openDatabase(dbFile.getPath(), null,
SQLiteDatabase.NO_LOCALIZED_COLLATORS | SQLiteDatabase.CREATE_IF_NECESSARY);
}
Но если указать папку "/Android/data/com.example.myapplication/files/books/+DATABASE_NAME" вместо getDatabasePath(DATABASE_NAME), то он все равно создаст папку databases, внутри нее пустой файл, а не использует уже существующий файл из /com.example.myapplication/files/
Не помогает. Сейчас в методе, в котором открываю базу проблем не возникает. Есть проверка:
if (!dbFile.exists()){
try {
CopyDatabaseFromAssets(); //копирует базу из ассетс в папку books успешно
}catch (IOException e){
throw new RuntimeException("Error creating source database", e);
}
}
Вот здесь непонятно открывается ли файл. И как можно проверку сделать?
return SQLiteDatabase.openDatabase(dbFile.getPath(), null, SQLiteDatabase.OPEN_READWRITE);
Если попытаться вывести из БД,Cursor cursor = db.rawQuery("SELECT * FROM booktable", null); так как файл как бы не существует, и создается пустой новый файл в папке databases
public ArrayList<BookModel> getDetails(){
SQLiteDatabase db = this.getReadableDatabase();
ArrayList<BookModel> modelList = new ArrayList<>();
Cursor cursor = db.rawQuery("SELECT * FROM booktable", null);
if (cursor!=null){
while (cursor.moveToNext()){
BookModel count = new BookModel(cursor.getInt(0), cursor.getString(1), cursor.getString(2) , cursor.getString(3));
modelList.add(count);
}
cursor.close();
db.close();
}
return modelList;
}
Ответы (1 шт):
Вам надо перегрузить в своей Activity метод:
@Overrides
public File getDatabasePath(String databaseName) {
//здесь надо написать обращение к другому каталогу
}
Только не забывайте, что со Scoped Storage у вас есть крайне урезанный доступ к внешнему хранилищу, то есть объект типа File к файлу на внешнем хранилище вы не получите.