Использовать свою папку вместо "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 шт):

Автор решения: Barmaley

Вам надо перегрузить в своей Activity метод:

@Overrides
public File getDatabasePath(String databaseName) {
    //здесь надо написать обращение к другому каталогу
}

Только не забывайте, что со Scoped Storage у вас есть крайне урезанный доступ к внешнему хранилищу, то есть объект типа File к файлу на внешнем хранилище вы не получите.

→ Ссылка