【发布时间】:2013-12-04 04:59:44
【问题描述】:
我面临一个非常奇怪的问题。我正在开发一个以 sqlite DB 作为其数据库的 android 应用程序。我正在使用扩展 SQLiteOpenHelper 的 DBAdapter 类。我在互联网上搜索过,但找不到解决方案。
这是我的 SQLiteOpenHelper 类
public class DBAdapter extends SQLiteOpenHelper{
private static DBAdapter mInstance = null;
/**The Android's default system path of your application database. */
private static String DB_PATH = "/data/data/com.mydbapp.android/databases/";
private final static String DB_NAME = "mydb.sqlite";
private static final int DATABASE_VERSION = 1;
private static Context myContext;
public static DBAdapter getInstance(Context ctx) {
if (mInstance == null) {
mInstance = new DBAdapter(ctx);
}
return mInstance;
}
private DBAdapter(Context context) {
super(context, DB_NAME, null, DATABASE_VERSION);
DBAdapter.myContext = context;
DB_PATH = "/data/data/" +
context.getPackageName()+
"/databases/";
}
public void deleteDB()
{
myContext.deleteDatabase(DB_NAME);
}
public void createDataBase() throws IOException{
boolean dbExist = checkDataBase();
if(dbExist )
{
this.getWritableDatabase();
}
if(!dbExist){
this.getReadableDatabase();
try {
copyDataBase();
} catch (IOException e) {
e.printStackTrace();
throw new Error("Error copying database");
}
}
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
{
if (newVersion > oldVersion)
{
System.out.println("DB Upgrade logic")
}
}
现在,当我更改 private static final int DATABASE_VERSION = 2; 时,onUpgrade() 方法不会被调用,但是当我更改 private static final int DATABASE_VERSION = 3; 时,onUpgrade() 会起作用。
所以我的问题是,当我将数据库版本从 1 更改为 2 时,它为什么不调用 onUpgrade() 方法。
请帮我解决这个问题。
编辑 1
我注意到另一种奇怪的行为。当我最初使用 DB 版本 1 运行应用程序,然后再次使用健全的 DB 版本 (1) 安装应用程序时,现在如果我将 DB 版本 1 更改为 2,则调用 onUpgrade()。我的意思是我必须使用相同的数据库版本安装应用程序 2 次,然后如果我更改数据库版本,就会调用 onUpgrade()。
【问题讨论】:
-
onUpgrade只有在有旧数据库要升级时才会被调用。 -
@CL。是的,这似乎合乎逻辑,但它不仅仅在第一次调用。
-
数据库版本肯定会发生变化,因为我已经通过拉数据库文件检查了 PRAGMA user_version 查询。
-
嗨 Raj,我面临着完全相同的问题。你有什么解决办法吗?请告诉我。
标签: android sqlite sqliteopenhelper