2015-02-23 61 views
1

在我的應用程序中,我有一個使用DBHelper類中的DB查詢創建的數據庫。我希望onUpgrade語句在安裝apk時運行,因爲有可能用戶可能會打開並安裝相同的應用程序。如何在第一次安裝時運行onUpgrade()語句?

在這種情況下,它成爲設備上的第一個安裝,onUpgrade不會運行,導致應用程序崩潰。

如果在以前的應用程序中更新新應用程序,它會很好地工作。

如何重新使用此?這種情況下的解決方案是什麼?

請幫忙!!提前致謝 !!

這裏是我的DbHelper.java

public class Dbhelper extends SQLiteOpenHelper { 


public Dbhelper(Context context) { 
    super(context, DATABASE_NAME, null, DATABASE_VERSION); 
} 

    @Override 
    public void onCreate(SQLiteDatabase database) { 

     database.execSQL(TABLE_CREATE_IMAGE); 
     database.execSQL(TABLE_CREATE_ATTEDANCE); 
     database.execSQL(TABLE_CREATE_STOCK); 


    } 

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

       Log.e("","upgrade "); 

       database.execSQL("ALTER TABLE stock ADD db_stock_id varchar(100)");//1.1 
//    

    } 

    public void dropandcreate(SQLiteDatabase database) 
    { 

     database.execSQL("DROP TABLE IF EXISTS image"); 
     database.execSQL("DROP TABLE IF EXISTS attendance"); 
     database.execSQL("DROP TABLE IF EXISTS stock"); 

     onCreate(database); 
    } 
} 
+1

'onUpgrade不運行它會導致應用程序crash'請出示這讓上應用程序崩潰 – 2015-02-23 06:01:48

+0

請發表您的'logcat' – Gattsu 2015-02-23 06:04:08

+0

我不明白是什麼問題。 'onCreate()'總是必須創建表的最新版本,'onUpgrade()'僅用於升級表的舊版本。換句話說,在'onCreate()'中創建庫存表的查詢已經包含了'db_stock_id'這個列。 – 2015-02-23 06:05:17

回答

2

調用它自己:

@Override 
public void onCreate(SQLiteDatabase database) { 

    database.execSQL(TABLE_CREATE_IMAGE); 
    database.execSQL(TABLE_CREATE_ATTEDANCE); 
    database.execSQL(TABLE_CREATE_STOCK); 

    onUpgrade(database, VERSION); 
} 
+0

這會更新android存儲的數據庫版本嗎? – aandis 2017-03-05 10:15:41

+0

不,數據庫版本是由傳遞給超級構造函數的編號定義的。 – nhaarman 2017-03-05 21:48:26

相關問題