即使卸载后也不会调用Android ORMLite DbHelper onCreate()

莱安德罗

重新安装后第一次运行我的应用程序时出现此错误:android.database.sqlite.SQLiteException:没有这样的表

(当我的应用尝试从数据库中读取时,会发生此错误)

由于某种原因,没有调用DBHelper中的onCreate()方法,因此也没有创建表。我遵循了其他问题的建议,并尝试调用getWritableDatabase(),还尝试了create()调用以在某些表中插入数据,但还是没有运气:从未调用过onCreate。

但是,我通过将DATABASE_VERSION值更改为2使其工作了。但这没有意义,因为这是卸载后的全新安装。我还发现在SQL读取错误之前已创建了数据库,但是数据库只有1个表“ android_metadata”(不是我创建的)。我在这里发布一些代码以供参考

 
public class DatabaseHelper extends OrmLiteSqliteOpenHelper{
    private static final String DATABASE_NAME = "RoutePlanner.db";
    private static final int DATABASE_VERSION = 1;

    private Dao<Trip, Integer> tripDAO = null;
    private RuntimeExceptionDao<Trip, Integer> tripRunTimeDAO = null;
     ...
}

@Override
    public SQLiteDatabase getWritableDatabase() {
        return super.getWritableDatabase();
}

public DatabaseHelper(Context context){
        super(context, DATABASE_NAME,null, DATABASE_VERSION,    R.raw.ormlite_config);
}

@Override
public void onCreate(SQLiteDatabase db, ConnectionSource source) {

        try {
            Log.i(DatabaseHelper.class.getSimpleName(), "onCreate");
            TableUtils.createTable(source, Trip.class);
            ...
        } catch (SQLException ex) {
            Log.e(DatabaseHelper.class.getSimpleName(), "Error creating db", ex);
            throw new RuntimeException(ex);

        }
}

莱安德罗

好的,我发现了问题,希望这种解释对其他不该做的事情有所帮助。问题是我有一个单独的日历模块,我想访问我的数据库。为了使事情“更简单”,我在该模块上创建了一个单独的DatabaseHelper,以访问与我的主模块相同的SQLite数据库。第二个DatabaseHelper的存在导致了我所有的问题。解决方案可以将2个模块合并为一个,或者使用数据库服务提供程序

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章