具有相同数据库名称的Android多个ContentProviders会抛出“无此表”异常

时间:2012-12-05 11:53:04

标签: android sqlite sqliteopenhelper

对多个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);
        }
    }

2 个答案:

答案 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以在您的模拟器上可视化数据库,以便您可以查看已创建的表格并检查它是否符合您的预期。