【问题标题】:Android multiple ContentProviders with same database name throws 'no such table' exception具有相同数据库名称的 Android 多个 ContentProvider 会引发“没有这样的表”异常
【发布时间】:2012-12-05 11:53:04
【问题描述】:

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

【问题讨论】:

    标签: android sqlite sqliteopenhelper


    【解决方案1】:

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

    我还建议您安装此eclipse plugin 以在您的模拟器上可视化数据库,以便您可以查看您创建的表并检查它是否符合您的预期。

    【讨论】:

    • 哦,我确实花了相当多的时间检查声明。但我得出的结论是该语句不是问题,因为在 onCreate() 期间没有报告日志。
    【解决方案2】:
         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);
        }
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-04-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-13
      • 2020-08-17
      相关资源
      最近更新 更多