我有一个应用程序,我想通过向其添加新值将其数据库更新到下一个版本。新数据位于临时数据库中。
这是我的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);
}
四个第一次做得很好。问题是附加查询。代码不会抛出任何异常或任何错误,但它也不会对数据库产生任何影响,并且新数据不会被添加。
我该如何解决这个问题?
答案 0 :(得分:1)
您必须增加在SQLiteDatabaseOpenHelper构造函数中传递的数字。
这是DB_VERSION,通过增加它,你的onUpgrade方法将被调用,参数是oldVersion(=从哪个版本)和newVersion(=你刚刚设置的DB_VERSION),根据这些整数你可以做每个ALTER表到所有版本。