Android SQLiteOpenHelper onUpgrade使用注意事项

  1. onCreate只在数据库从无到有的时候才会调用
  2. 新增表,需要在onCreate和onUpgrade中都要进行增表操作,分别为新建库和升级库服务。
  3. onCreate里永远只写最新库的创建代码,随时保持更新。onUpgrade负责数据库的升级工作。
  4. 为了减少crash发生可能,在线上版的onUpgrade中增加trycatch,如果出错,删库重建是一个补救措施。
    @Override
    public void onCreate(SQLiteDatabase sqLiteDatabase, ConnectionSource connectionSource) {
        try {
            TableUtils.createTableIfNotExists(connectionSource, Daily.class);
            TableUtils.createTableIfNotExists(connectionSource, DailyQuestionCommentDraft.class);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    @Override
    public void onUpgrade(SQLiteDatabase sqLiteDatabase, ConnectionSource connectionSource, int oldVersion, int
            newVersion) {
        try {
            if (oldVersion < 2) {
                TableUtils.createTableIfNotExists(connectionSource, DailyQuestionCommentDraft.class);
            }
        } catch (SQLException e) {
            KLog.e(TAG, e, "升级数据库失败");
            try {
                TableUtils.dropTable(connectionSource, Daily.class, true);
                TableUtils.dropTable(connectionSource, DailyQuestionCommentDraft.class, true);
                onCreate(sqLiteDatabase);
            } catch (SQLException e1) {
                // ignored
            }
        }
    }

你可能感兴趣的:(查漏补缺)