При использовании одного и того же имени базы данных для нескольких ContentProviders запрос завершается с ошибкой с выдачей исключения как «нет такой таблицы».
Я исследовал справочники, книги, интернет-обсуждения, но решения не нашел.
Я заметил, что все ContentProviders терпят неудачу, кроме одного ContentProvider, объявленного первым в манифесте. Поэтому я дал уникальное имя базы данных, и исключение исчезло. Это работает, но странно иметь несколько баз данных с одной таблицей.
Я хочу выяснить, почему возникает проблема, если это возможно. Ниже моя реализация по существу.
Все ContentProviders имеют отдельный SQLiteOpenHelper, определенный как внутренний закрытый класс. DATABASE_NAME и DATABASE_VERSION — это одно и то же.
public class TheFirstProvider extends ContentProvider {
private static final String DATABASE_NAME = "dbname.db";
private static final int DATABASE_VERSION = 1;
private SQLiteOpenHelper dbHelper;
@Override
public boolean onCreate(){
mContext = getContext();
dbHelper = new FirstDbHelper(mContext, DATABASE_NAME, null, DATABASE_VERSION);
}
private class FirstDbHelper extends SQLiteOpenHelper {
...
private static final String DATABASE_CREATE_FIRST = ... ;
@Override
public void onCreate(SQLiteDatabase db){
db.execSQL(DATABASE_CREATE_FIRST);
}
}