2017-01-04 4 views
-2

У меня есть приложение, которое создает файл базы данных в '/storage/emulated/0/databases/mydb.db', и в нем находятся файлы. У меня есть другое приложение, которое пытается открыть эту базу данных. Но я получаю код ошибки 14. Не удалось открыть базу данных при попытке отменить таблицу в этом db.Не удается открыть файл базы данных

public class DataBaseHelper extends SQLiteOpenHelper { 

public SQLiteDatabase myDataBase; 
public String TABLE_NAME; 
// Database Information 
static final String DB_NAME = "mydb.DB"; 
public static final String FILE_DIR = "databases"; 
private String DB_PATH = Environment.getExternalStorageDirectory() 
     + File.separator + FILE_DIR + File.separator + DB_NAME; 

public DataBaseHelper(Context context, String name) { 
    super(context, name, null, 1); 
    TABLE_NAME = name; 
} 

public void openDatabase() throws SQLiteException { 
    String DBPath = DB_PATH + "/" +TABLE_NAME; 
    myDataBase = SQLiteDatabase.openDatabase(DBPath,null,SQLiteDatabase.OPEN_READWRITE); 
} 

@Override 
public void onCreate(SQLiteDatabase db) { 

} 

@Override 
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 

} 

Я получаю сообщение об ошибке при myDataBase = SQLiteDatabase.openDatabase(DBPath,null,SQLiteDatabase.OPEN_READWRITE);

+1

ли вы проверить права доступа созданного файла? Два разных приложения - это два разных пользователя Linux. –

+0

Я не пользуюсь корневым телефоном. поэтому разрешения по умолчанию. –

+0

Вы можете поделиться своей базой данных либо с помощью ContentProvider, либо путем размещения базы данных в папке, доступной из обоих приложений (и, возможно, для всех установленных приложений). –

ответ

0

1. Разрешение

Ваше приложение нуждается в файл на чтение. Выше Android 6.0 необходимо запросить разрешение на запуск.

Смотреть это: android.database.sqlite.SQLiteCantOpenDatabaseException: unknown error (code 14): Could not open database


2. Неправильный путь

кажется, что путь

/storage/emulated/0/databases/mydb.db

не такой, как путь ниже.

Environment.getExternalStorageDirectory() + File.separator + FILE_DIR + File.separator + DB_NAME

Итак, перед открыть файл базы данных, сравнить два пути, чтобы проверить это то же самое.

if (DB_PATH.compareTo("/storage/emulated/0/databases/mydb.db")){ 
    // Do something 
} 

И проверьте, что это действительно существует.

File file = new File(myPath);  
if (file.exists() && !file.isDirectory()) { 
    // Do something 
} 

Детали: android.database.sqlite.SQLiteCantOpenDatabaseException: unknown error (code 14): Could not open database trouble

Смежные вопросы