1

当为多个 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);
        }
    }
4

2 回答 2

0

检查您的 Create table 语句并验证它是否正确执行,并查看您在查询中使用的表是否与创建的表具有完全相同的名称。有时 DDL(创建语句)上的一个小错误会导致这样的问题静默发生。

我还建议你安装这个eclipse 插件来可视化你的模拟器上的数据库,这样你就可以看到你创建的表并检查它是否是你所期望的。

于 2012-12-05T12:27:46.277 回答
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);
    }

如下设置您的代码。它将工作。

于 2012-12-05T11:59:26.093 回答