2013-10-08 36 views
11

我在更新應用程序版本後在我上傳的應用程序中沒有發現此類表的表「table_name」。我測試我得到這個問題後,纔將舊版本的應用程序升級到新版本的應用程序的如何測試升級sqlite數據庫,然後上傳我的應用程序的新版本在Android商店的Play商店

我在onUpgrade已經實現

我已經做了代碼()方法也出來後在構造函數中升級數據庫版本,但我無法在設備中測試它。

步驟1)增加版本代碼1至2

public databasehelper(Context context) { 

     super(context, DATABASE_NAME, null, 2); 
     this.myContext = context; 
     try { 
      createDataBase(); 
      openDataBase(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

    } 

步驟2)添加新的表爲onUpgrade()方法

@Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 

     Log.e("onUpgrade db", ">>>>called"); 
     switch (oldVersion) { 
     case 1: 
      db.execSQL(DATABASE_CREATE_notification_counter); 
      Log.e("db version", ">>>"+oldVersion); 
      // we want both updates, so no break statement here... 
     case 2: 
      Log.e("db version", ">>>"+oldVersion); 
        // I removed onCreate() method from here because new version will already have the new table 
//   onCreate(db); 
     } 

    } 

步驟3)的onCreate ()方法用於新版本的數據庫。

@Override 
    public void onCreate(SQLiteDatabase db) { 
     db.execSQL(DATABASE_CREATE_notification_counter); 
     Log.d("oncreate db", ">>>>called"); 
    } 

我已經得到了解決升級數據庫link1link2link3link4

爲什麼我無法測試它

我們已上載於Play商店付費應用程序,所以我一定要考分貝模擬器或設備中的升級方法使用兩個不同的apk意味着舊版本和較新的版本.. 和我在設備上第一次使用舊版本和新版本進行了測試(數據庫更改與添加db中的新表),但此時不會調用onUpgrade()方法。

問:

1)我怎麼能測試數據庫的 Play商店更新新版本之前,升級?

2)只有當您僅從Play商店 更新版本時纔會打電話?

請幫我解決這個問題。

將不勝感激。提前致謝。

+0

你爲什麼不簡單地連續安裝兩個版本?我無法理解這裏缺少的東西 – njzk2

+0

@ njzk2其實我已經在我的代碼中進行了升級數據庫的更改,所以我不能直接從eclipse直接安裝舊版本,而對於新版本,我已經通過兩種方式進行了測試,只需簡單安裝即可簽署apk但沒有運氣。 – Maulik

+0

你沒有你之前版本的來源? – njzk2

回答

4

數據庫版本存儲在數據庫中。只需使用舊版本創建一個db(db_old)而不是在DbHelper中。使用DbHelper連接到db_old,並調用onUpgrade方法。

你可以使用你現有的db作爲db_old,只是減少它的版本。要更改版本,您可以使用任何sqlite數據庫編輯器。

如果不想爲DbHelper編寫測試並希望模擬應用程序升級,則可以使用adb install -r命令。 Read more here.

+0

感謝您的回答我的問題。你能否簡單地給我解釋一下,例如讓我正確理解? – Maulik

+1

db只是一個包含數據的文件。數據的版本也存儲在同一個文件中。如果你想要調用onUpgrade,你應該用sqlite編輯器打開你的當前數據庫文件並減少數據庫版本。下次連接到db時,OnUpgrade會被調用,你可以檢查它是如何工作的。 – Leonidos

+0

你也可以在DbHelper中增加db版本。並連接到您當前的分貝。應該調用OnUpgrade。 – Leonidos

1

如何測試不Play商店更新新版本之前,在android系統

1)我如何測試數據庫升級從Play商店下載新版本的應用程序升級SQLite數據庫?

我下載的源碼瀏覽器插件月食從這裏

http://sourceforge.net/projects/sqlitebrowser/

,並檢查瞭如何使用SQLite插件

http://www.coderzheaven.com/2011/04/18/sqlitemanager-plugin-for-eclipse/

只是複製從第一個鏈接的jar本教程並粘貼到名爲plugin的eclipse安裝文件夾中並重新啓動eclipse

然後開始仿真器和DDMS導航到你的包,如果存在,或者不是你對錶所做的更改,您可以查看您的SQLite數據庫&檢查

+0

對不起兄弟,我認爲你沒有正確理解我的問題。我想在上傳APK作爲新版本的應用程序的Play商店之前測試我的新版本數據庫。 – Maulik

+0

是的,這就是我試圖告訴你,在yiur數據庫表中進行更改並在上傳播放之前,使用sqlite瀏覽器來檢查它是否已更改新的數據庫的作品 –

+0

我已經有用於Firfox的sqlite管理器插件。我已經用sqlite管理器進行了測試,但是我的onupgrade()方法不會被調用,所以在升級數據庫後我的新表無法創建。 – Maulik

1

您可以從不同的源比Play商店中安裝APK(如果是在您的手機上啓用)。 通過電子郵件將其發送至手機或通過USB電纜複製apk的最簡單方法。

3

漫長的尋找和測試我的應用程序後,終於...

我得到它的工作!在的CreateDatabase級的一行丟失:

我剛纔添加以下線在我的代碼的CreateDatabase()

this.getWritableDatabase(); 

我們必須賦予權限,同時我們創建的數據庫編寫數據庫,此權限將被授予寫入數據庫的權限,同時我們從Play商店升級應用程序。

一旦打開成功,數據庫將被緩存,因此每次需要寫入數據庫時​​都可以調用 這種方法。 (請確保 在不再需要數據庫時調用close()。)錯誤(如 錯誤的權限或完整磁盤可能會導致此方法失敗,但如果問題得到解決,則 未來嘗試可能成功。

數據庫升級可能需要很長時間,您不應該從應用程序主線程調用此方法 ,包括從 ContentProvider.onCreate()。

public void createDataBase() throws IOException 
     { boolean dbExist = checkDataBase(); 
      if (!dbExist) { 
      this.getReadableDatabase(); 
      try { 
       // ---If not created then copy the database--- 
       copyDataBase(); 
      } catch (IOException e) { 
       throw new Error("Error copying database"); 
      } 
      } 
      else { 
      /* This line: that has been solve my problem */ 
      this.getWritableDatabase(); 
      } 
     } 

公共無效的openDatabase()拋出的SQLException {

 // --- Open the database---   String myPath = path + DATABASE_NAME; 
     myDataBase = SQLiteDatabase.openDatabase(myPath, null, 
       SQLiteDatabase.OPEN_READWRITE); // you also have to add open_readwrite condition here 
       /*onUpgrade(myDataBase, 1, 2);*/ // no need to call upgrade  here it will be called automatically 

    } 

你必須給讀寫狀態,同時打開數據庫。

此外,當創建類DataBaseHelper的新對象時,僅在數據庫版本號不匹配時調用onUpgrade()。所以這意味着沒有必要自己調用升級。如果您發佈數據庫的更新,只需將版本號增加1,然後在onUpgrade()方法中應用更改。

我是從給定的鏈接:

onUpgrade database - oldVersion - newVersion

希望這將有助於任何人,未來開發商!

相關問題