通过附加数据库更新Android数据库

时间:2015-12-07 18:19:30

标签: android sqlite android-sqlite sqliteopenhelper android-sql

我有一个应用程序,我想通过向其添加新值将其数据库更新到下一个版本。新数据位于临时数据库中。

这是我的onUpgrade()方法:

public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        // version 2

        try{

            db.execSQL("ALTER TABLE tbl_questions ADD COLUMN q_fav BOOLEAN DEFAULT 0");
            db.execSQL("ALTER TABLE tbl_users ADD COLUMN user_voted BOOLEAN DEFAULT 0");
            db.execSQL("INSERT INTO tbl_categories (_id, cat_title) VALUES (3, '\u0639\u0645\u0648\u0645\u06CC (\u0639\u0644\u0648\u0645 \u0627\u0646\u0633\u0627\u0646\u06CC)')");
            db.execSQL("CREATE TABLE [tbl_schedule] (" +
                       "[_id] INTEGER PRIMARY KEY, " +
                       "[lesson_name] VARCHAR, " +
                       "[lesson_unit] VARCHAR, " +
                       "[teacher_name] VARCHAR, " +
                       "[exam_date] VARCHAR, " +
                       "[description] VARCHAR);");
            db.setTransactionSuccessful();
            db.endTransaction();
            db.execSQL("ATTACH DATABASE '/data/data/com.andrun.payamenoo/databases/db_temp.sqlite' AS SRC;");
            db.beginTransaction();
            db.execSQL("INSERT INTO MAIN.tbl_questions SELECT * FROM SRC.tbl_questions;");
            //db.execSQL("DETACH SRC;");
        }catch(Exception e){
            e.printStackTrace();
        }finally{
        }

        super.onUpgrade(db, oldVersion, newVersion);
    }

四个第一次做得很好。问题是附加查询。代码不会抛出任何异常或任何错误,但它也不会对数据库产生任何影响,并且新数据不会被添加。

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

您必须增加在SQLiteDatabaseOpenHelper构造函数中传递的数字。

这是DB_VERSION,通过增加它,你的onUpgrade方法将被调用,参数是oldVersion(=从哪个版本)和newVersion(=你刚刚设置的DB_VERSION),根据这些整数你可以做每个ALTER表到所有版本。