2014-07-06 87 views
0

我一直在努力升級我的預填充SQLite數據庫,並不能完全解決如何讓onUpgrade工作。請參閱下面我的代碼來複制整個數據庫。使用onUpgrade更新我的預填充SQLite數據庫()

// MAIN MENU ON GAME LOAD UP 
DB_PATH = getDatabasePath(DataBaseHelper.DB_NAME).toString(); 
DataBaseHelper myDbHelper = new DataBaseHelper(this); 
myDbHelper = new DataBaseHelper(this); 
try 
{ 
    myDbHelper.createDataBase(); 
} 
catch (IOException ioe)  
{ 
    throw new Error("Unable to create database"); 
} 
myDbHelper.close(); 

// HELPER CLASS 
public class DataBaseHelper extends SQLiteOpenHelper 
{ 
    private static final int DATABASE_VERSION = 1; 

    public DataBaseHelper(Context context) 
    { 
     super(context, DB_NAME, null, DATABASE_VERSION); 
     this.myContext = context; 
    } 

    public void createDataBase() throws IOException 
    { 
     boolean dbExist = databaseExist(); 
     if(dbExist) 
     { 
      //database already exist 
     } 
     else 
     { 
      try 
      { 
       copyDataBase(); 
      } 
      catch (IOException e) 
      { 
       throw new Error("Error copying database"); 
      } 
     } 
    } 

    @Override 
    public void onCreate(SQLiteDatabase db) {} 

    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) 
    { 
     switch (oldVersion) 
     { 
      case 1: 
       db.execSQL("UPDATE MazeOnDraw SET posX=1, posY=2 WHERE rowid=5"); 
       break; 
     } 
    } 
} 

所以我不知道我在做什麼錯在這裏然而onUpgrade似乎永遠不會被調用,我遞增數據庫版本。除此之外,這個過程可以與多個數據庫一起工作,因爲我可能有兩個不同的數據庫(儘管如果需要可以將它們壓縮爲1)。

最後,可以通過ecplise調試來測試onUpgrade進程,還是必須通過開發人員控制檯上的alpha版本進行測試。

+0

我會鼓勵你切換到[使用'SQLiteAssetHelper'(https://github.com/jgilfelt/android-sqlite-asset-helper)。 – CommonsWare

+0

這看起來非常有保證,並且會在今晚看到這個 –

回答

0

請chagne DB_vERSION值2 ..所以DDMS可識別的應用程序有databasee升級新版本..

CHANGE

private static final int DATABASE_VERSION = 2; 

super(context, DB_NAME, null, DATABASE_VERSION); 

在此聲明最後一個參數是數據庫版本.. 將其設置爲2以獲取新的更新APK。所以現有的用戶可以有新添加的表格或列。

上更新的apk onUpgrade將調用。在那裏你可以從資產複製數據庫。但比現有的用戶會有數據丟失..所以最好的選擇是在數據庫中動態添加表。

請參閱本answer

+0

這是我正在做的事情,但是在調試器模式下運行時,onUpgrade仍然不會被調用 –

+0

在設備或模擬器中有更舊的db版本嗎?...如果你有新鮮apk,比它不會調用.. –

+0

它可能是一個fresk apk但我不知道我怎麼知道,我只是在eclipse中打開調試器部分來加載應用程序 –

相關問題