У меня есть база данных SQLite на моей SD-карте (/storage/sdcard/MyDir/mydb.sqlite) и я пытаюсь записать в нее некоторые данные. Из-за структуры доступа к хранилищу я не могу получить доступ к файлу напрямую, и мне нужно получить доступ на запись, как описано здесь . Это дает мне доступ на запись через DocumentFile .
Однако к базе данных требуется доступ через JDBC . JDBC требует String для файла базы данных, чтобы установить соединение с базой данных. Это приводит к следующим проблемам:
- Если я использую Java-путь, я могу получить доступ к базе данных, но у меня нет разрешения на запись. Даже если доступ был предоставлен, как описано выше.
- Если я использую Uri из DocumentFile (с разрешением на запись) JDBC не делаетнайдите файл базы данных.
Я могу поместить свою базу данных в личный каталог приложения на SDCard (/storage/sdcard/Android/data/my.application.package/), где я пишуразрешение. Тем не менее, я хотел бы хранить базу данных вне этого каталога, так как база данных должна быть доступна нескольким приложениям.
Я попробовал это предложение, которое работает на устройстве хранения данных, но не работает на SDCard. На SDCard я получаю эту трассировку стека:
android.database.sqlite.SQLiteCantOpenDatabaseException: unknown error (code 1294 SQLITE_CANTOPEN_ENOENT[1294]): Could not open database
at android.database.sqlite.SQLiteConnection.nativeOpen(Native Method)
at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:284)
at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:215)
at android.database.sqlite.SQLiteConnectionPool.openConnectionLocked(SQLiteConnectionPool.java:705)
at android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:272)
at android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:239)
at android.database.sqlite.SQLiteDatabase.openInner(SQLiteDatabase.java:1292)
at android.database.sqlite.SQLiteDatabase.open(SQLiteDatabase.java:1247)
at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:930)
at android.database.sqlite.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:947)
Когда я получаю доступ к базе данных на устройстве хранения (внутреннее хранилище и внешнее хранилище), я могу записать базу данных. Только если я получаю доступ к базе данных на SD-карте, у меня нет разрешения на запись.
Есть ли возможность получить доступ на запись к определенным файлам на SD-карте на основе java.io.File , как этовозможно для DocumentFile ?
Кто-нибудь имеет другое представление, как я могу получить доступ к данным на SD-карте с разрешением на запись?