Android открыть или создать базу данных - PullRequest
5 голосов
/ 21 июля 2011

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

07-21 13: 33: 17.587: ОШИБКА / AndroidRuntime (5541): причина: android.database.sqlite.SQLiteException: невозможно открытьфайл базы данных

Кто-нибудь знает, что может быть причиной этого?Вот код, который у меня есть в методе open () моего класса базы данных:

File sdcard = Environment.getExternalStorageDirectory();

String dbfile = sdcard.getAbsolutePath() + File.separator+ "external_sd" + File.separator + Schema.DATABASE_NAME ;

db = SQLiteDatabase.openOrCreateDatabase(dbfile, null);

Ответы [ 2 ]

8 голосов
/ 21 июля 2011

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

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

Однако хранение данных на SD-карте считается небезопасным. Потому что каждое приложение, у которого есть разрешения на хранение данных в хранилище sd, может обращаться к базе данных.

Изменить: Другая возможная проблема заключается в том, что внешнее хранилище может быть недоступно. Вы должны убедиться, что ваше внешнее хранилище доступно для записи. Одним из методов будет определение состояния через getExternalStorageState (см. Ссылку здесь ).

getExternalStorageState() returns MEDIA_SHARED if the media is present not mounted, and shared via USB mass storage. 

Ссылки . Здесь также есть сообщение о переполнении стека при проверке состояния: Ошибка записи текстового файла на SD-карту

0 голосов
/ 10 июля 2019
public static final String DATABASE_PATH=Environment.getExternalStorageDirectory().getAbsolutePath()+"/WebService/Databases/";


private static final String DATABASE_NAME="database_name.db";


SQLiteDatabase db=SQLiteDatabase.openDatabase(DATABASE_PATH+DATABASE_NAME,null,SQLiteDatabase.CREATE_IF_NECESSARY | SQLiteDatabase.OPEN_READWRITE);
...