2011-09-23 75 views
3

我想在我的Android應用程序中更新我的數據庫。當我更新版本號時,onUpgrade被調用,但版本號不會增加,所以每次訪問數據庫時,都會調用onUpgrade。這裏是我的代碼:onUpgrade數據庫Android版本號不增加

private final static int DB_VERSION = 8; 

     public DataBaseHelper(Context context) { 

     super(context, DB_NAME, null, DB_VERSION); 
     this.myContext = context; 
    } 
     @Override 
    public void onCreate(SQLiteDatabase db) { 
     Log.d(TAG, "in onCreate"); 
     try { 
      copyDataBase(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    } 

    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     Log.d(TAG, "in onUpgrade. Old is: " + oldVersion + " New is: " + newVersion); 
     myContext.deleteDatabase(DB_NAME); 
     Log.d(TAG, "the version is " + db.getVersion()); 
     db.setVersion(newVersion); 
     Log.d(TAG, "the version is " + db.getVersion()); 
     onCreate(db);   
    } 

任何人都知道爲什麼會發生這種情況?

+0

也許thil鏈接可能會有所幫助http://stackoverflow.com/questions/7173896/onupgrade-database-oldversion-newversion –

+0

我已經看過這個鏈接...我仍然無法弄清楚。即使數據庫版本號是靜態的,版本號也不會在onUpgrade()中升級。 OnUpgrade被調用,但版本號沒有得到更新... – coder

+0

當onUpgrade被調用時,oldVersion和newVersion的值是什麼? –

回答

0

我最終加入另一個數據庫添加到資產的文件夾。我知道它不是最好的解決方案,但它工作。當這次升級應用程序時,它只是寫入新數據庫 - 它有一個新名稱 - 而不是舊數據庫。我檢查是否存在舊的,如果存在,我刪除它。

2

不要嘗試手動設置版本。 (這一切都照顧。)

不要試圖刪除數據庫。您正在升級它,並且手動設置您剛剛刪除的數據庫版本不會很好。

您應該在onUpgrade中做的所有事情是對錶格結構進行必要的更改。如果你想通過刪除當前表(而不是數據庫)然後重新創建它們,那很好。

如果你需要在你的表來保存數據,看看這個問題的建議,關於如何做到這一點: Upgrade SQLite database from one version to another?

+0

根據api,context.deleteDatabase()刪除整個數據庫。我想我想刪除整個事情,因爲我的數據庫的結構和所有2000+條目都需要更改?所有的表格都需要更改... – coder

+0

不,試圖刪除數據庫會嚴重地將事情搞砸在這裏。只需刪除表格,然後重新創建它們。 –

+0

我該如何重寫資產文件夾中的表格而不是整個數據庫? – coder