首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于Android的类似Rails的数据库模式版本升级

用于Android的类似Rails的数据库模式版本升级
EN

Stack Overflow用户
提问于 2011-02-12 23:51:04
回答 1查看 546关注 0票数 4

所以,我使用的是安卓的SQLite数据库和SQLiteOpenHelper。它似乎有数据库版本和升级的概念..。但是看起来你应该滚动你自己的代码来进行实际的升级,并让你的onCreate方法与你的更新保持同步。

从Rails开发背景来看,这似乎有点原始。对于不熟悉的人,Rails允许您只编写一个按版本升级的类,Rails负责应用任何需要的版本.这也适用于DB创建;您只有数据库模式的一种表示,即迁移集。Rails还对模式更改进行了独立于DB的表示,但这对于Android来说并不必要,因为它只支持SQLite (这很好)。

有没有人为Android编写了一个体面的模式迁移助手类,允许我更接近DB模式管理涅槃(RailsEdition(TM))?这样我就省去了自己丑陋的实现。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-06-28 03:48:15

考虑到我没有发现任何支持Android的东西,实际上是有效的,不需要我订阅一个疯狂的数据库世界视图,而且也不需要花很多钱(爱好项目,没有骰子),我想出了下面的bodgy。这并不聪明,但它至少允许我以我熟悉的方式思考我的模式。对于一个大型的代码库/数据库模式,我不认为它会很好地工作,但是如果您已经做到了,那么您可能有能力支付一些东西。

代码语言:javascript
复制
public class AppDatabase extends SQLiteOpenHelper {
    public static final String DATABASE_NAME = "main";
    public static final int LATEST_VERSION = 4;

    public static SQLiteDatabase open(Context ctx) {
        AppDatabase db = new AppDatabase(ctx);
        return db.getWritableDatabase();
    }

    public AppDatabase(Context ctx) {
        super(ctx, DATABASE_NAME, null, LATEST_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        onUpgrade(db, 0, LATEST_VERSION);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        for (int i = oldVersion+1; i <= newVersion; i++) {
            switch (i) {
            case 1:
                db.execSQL("CREATE TABLE blah ( " +
                        "id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT," +
                        "start CHAR(4)," +
                        "end CHAR(4)" +
                        ")");
                break;
            case 2:
                db.execSQL("CREATE TABLE fortnights ( " +
                        "first_day DATE PRIMARY KEY" +
                        ")");
                break;
            case 3:
                db.execSQL("ALTER TABLE shifts ADD top CHAR(4)");
                db.execSQL("ALTER TABLE shifts ADD bottom CHAR(4)");
                db.execSQL("UPDATE shifts set top=start, bottom=end");
                break;
            case 4:
                db.execSQL("ALTER TABLE shifts ADD callout BOOLEAN DEFAULT 0");
                break;
            }
        }
    }
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4981441

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档