对多个ContentProviders使用相同的数据库名称时,查询失败,异常抛出为“无此表”。
我研究了参考书,书籍,互联网讨论,但找不到解决方案。
我注意到除了清单中首先声明的一个ContentProvider之外,所有ContentProvide都失败了。所以我给了唯一的数据库名称,例外就消失了。它有效但有多个单表数据库很奇怪。
我想弄清楚为什么会出现问题。以下是我的实施内容。
所有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);
}
}
答案 0 :(得分:0)
private class FirstDbHelper extends SQLiteOpenHelper{
public FirstDbHelper(Context context) {
super(context,DATABASE_NAME,null,DATABASE_VERSION);
// TODO Auto-generated constructor stub
}
@Override
public void onCreate(SQLiteDatabase db) {
// TODO Auto-generated method stub
String query="Your Query";
db.execSQL(query);
}
将您的代码设置如下。它将起作用。
答案 1 :(得分:0)
检查您的Create table语句并验证它是否已正确执行,并查看您在查询中使用的表是否与创建的表完全相同。有时DDL上的一个小错误(创建语句)导致这样的问题无声地发生。
我还建议您安装此eclipse plugin以在您的模拟器上可视化数据库,以便您可以查看已创建的表格并检查它是否符合您的预期。