当为多个 ContentProviders 使用相同的数据库名称时,查询失败并抛出异常为“没有这样的表”。
我研究了参考资料,书籍,互联网讨论,但找不到解决方案。
我注意到除了清单中第一个声明的 ContentProvider 之外,所有 ContentProvider 都失败了。所以我给了唯一的数据库名称,异常就消失了。它可以工作,但是拥有多个单表数据库很奇怪。
如果可能的话,我想弄清楚为什么会出现问题。下面是我的实质实现。
所有 ContentProvider 都有单独的 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);
}
}